只显示主题贴
传奇代码 续
使用反射实现的监听器模式:
你写了一个private inner class用来实现监听器:
[code:1]
public class EnclosingType{
...
private class MyListener implements SomeListener
{
public void inform()
{
...
}
}
...
eventSource.addSomeListener(new MyListener());
& ...
- 进入论坛 Java 版
引用使变量,类的可访问性降到最低,是提高程序的正确性,掩盖底层实现细节的很有效的方法之一。
不知什么时候居然背上了误导读者的原罪?
你这话是对的。但楼主的主张并不是基于可访问性来谈的,他谈的是“性能”。按他的主张应该优先使用static fields(static的可访问性不小吧?),因为“static fields性能高”。所以误导读者。
- 进入论坛 Java 版
[code:1]new SomethingA.SomethingB(); [/code:1]
呵呵,我的第一反映也是要这样写。但这样写只能够适用于静态内部类(public static class)。对于“开放的非静态内部类”(public class)是不合法的。很少有人想到“开放的非静态内部类”的语法new A().new B(),因为很少有人见过“开放的非静态内部类”。这就是我让大家开眼的地方。
- 进入论坛 Java 版
引用建议你去看一下Jetty的代码,有很多的内部类。建议你去找找相关的资料,在发出评论可能会更好一些。我想你对内部类用的不是很多。
我不是很喜欢别人对我摆谱。故作高深这一着对我没用。有什么技术意见尽早说出来,请不要装出世外高人的样子,我不吃这一套。谢谢。
谈到看代码,我建议你去看看JDK的代码,看它有否释放出内部静态接口(类)乃至非静态内部类。然后再跟帖也不迟。
- 进入论坛 Java 版
我不认为"断章取义". new A().new B()这样的代码在任何情况下都不应该存在。并不是编译器允许这样写,写成这样就是合理的。
引用首先内部类并不仅仅是为了封装内部逻辑而存在,它更广泛的意义在于声明这个内部类与他的外部类是紧密联系而不可分割的。
比如上面的1,他在class A中声明了Class B,并且暴露了Class B,是不是为了说明Class B与Class A的紧密联系呢?这种生成Class B对象的方式是不是表明Class B实例的生成总是伴随Class A的实例生成呢?
非静态内部类的“广泛意义”到底是什么我已经说过了,是用于call back,或者临时性地继承修改 ...
- 进入论坛 Java 版
顺便提一句,
[code:1]new SomethingA().new somethingB();
SomethingA.this.someMethod();[/code:1]
这个论坛的代码显示功能并没有对怪异部分的代码做到关键字高亮。我猜论坛的设计者也没料到有人会这样写代码。
- 进入论坛 Java 版
要想这样的代码编译通过,
[code:1]new SomethingA().new somethingB();[/code:1]
那class就要这样写:
引用
public class SomethingA
{
public class SomethingB
{
}
}
这是非静态内部类。通常非静态内部类的作用是用来实现临时的监听器(相当于用C++中的函数指针来call back),或者对被引用的其他类做临时性地继承修改。这就意味着非静态内部类的作用是用于内部实现,根据OO起码的封装性的原则是不应该暴露的; 释放出来供其他外部类 ...
- 进入论坛 Java 版
这是我们公司意大利程序员的代码。我敢担保这个坛子上90%的Java大牛,都没有见过这种代码。
[code:1]Exmaple 1:
new SomethingA().new somethingB();
Example 2:
SomethingA.this.someMethod();[/code:1]
可以告诉大家,这样的代码是能够编译通过的。
- 进入论坛 Java 版
理论上应该是返回false。但JDK 1.5的JVM可能会缓存一些Integer的实例吧?至于到底缓存了多少,这应该不算是个技术问题吧。
另外我好像记得Integer.valueOf(i)是返回int而不是Integer.
- 进入论坛 Java 版







评论排行榜