内部类
来源:互联网 发布:赵丽颖杨紫 知乎 编辑:程序博客网 时间:2024/04/27 17:30
匿名内部类,比如下面函数内部initialize定义了两个匿名类(红色代码部分):
publicsynchronizedvoid initialize(Environment env,
Detector detector,
DaemonListener listener,
PlainLogger[] loggers) throws NullPointerException,
IllegalStateException {
if (fInitialized) {
return;
}
Helper.notNull( env, "environment" );
Helper.notNull( detector, "detector" );
fDetector = detector;
fDaemonListener = listener;
// Check the loggers.
if (loggers != null) {
for (int i = 0; i < loggers.length; i++) {
if (loggers[i] != null && !loggers[i].isLoggable( )) {
thrownew IllegalStateException( "Logger" + i
+ " isn't loggable" );
}
}
// Get loggers.
if (loggers.length >= 1) {
fAppLogger = loggers[0];
}
if (loggers.length >= 2) {
fErrorLogger = loggers[1];
}
}
// Initialize the daemon options first.
initDaemonOptions( env );
// Check the loggers.
if (loggers != null) {
for (int i = 0; i < loggers.length; i++) {
if (loggers[i] != null && !loggers[i].isLoggable( )) {
thrownew IllegalStateException( "Logger" + i
+ " isn't loggable" );
}
}
// Get loggers.
if (loggers.length >= 1) {
fAppLogger = loggers[0];
}
if (loggers.length >= 2) {
fErrorLogger = loggers[1];
}
}
log( "Using Rv Daemon: " + fDaemonOptions.getCurTransportOption( ) );
// Implements a detector listener.
DetectorListener detectorListener = new DetectorListener( ) {
public void onConnected() {
String newDaemon = fDaemonOptions.getCurTransportOption( );
log( "Connected to Daemon: " + newDaemon );
synchronized (Daemon.this) {
fState = DaemonState.CONNECTED;
for (Iterator i = fSwitchHandlers.iterator( ); i.hasNext( );) {
((SwitchHandler) i.next( )).doSwitching( newDaemon );
}
fState = DaemonState.SWITCHED;
}
log( "Switched to Daemon: " + newDaemon );
if (fDaemonListener != null) {
fDaemonListener.onStateChanged( fState,
fLastDaemon,
newDaemon );
}
}
public void onDisconnected() {
synchronized (Daemon.this) {
fState = DaemonState.SWITCHING;
round( );
}
log( "Disconnected to Daemon: " + fLastDaemon );
if (fDaemonListener != null) {
fDaemonListener.onStateChanged( fState,
fLastDaemon,
fDaemonOptions.peekNextAvailTransportOption( ) );
}
detect( );
}
};
fDetector.registerDetectorListener( detectorListener );
// Do the first connecting in other thread.
Thread first = new Thread( "InitialDetector" ) {
public void run() {
detect( );
}
};
first.start( );
fInitialized = true;
log( "Daemon detecting initialized." );
}
new DetectorListener( ){...}等价于创建一个派生自接口DectorListener的子类,然后返回该类的引用。 同样的道理,另外一个是从Thread派生并且重写了run函数,因此该类可以作为一个县城对象运行。
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- 内部类
- HashMap.js
- 接口
- 开发宝典:程序开发新手入门之Jave ME
- JavaString.js
- ruby 或许在明天
- 内部类
- 在ASP.NET程序中存储和调用word文件 http://blog.csdn.net/bcdliang/archive/2005/05/12/373886.aspx
- 无法在web服务器上启动调试问题
- 如何支持clone方法
- 枚举入门
- volatile关键字
- Google公司都有什么牛人
- 序列化
- 北京首个无车日 部分路段将只允许公交车辆通行