匿名内部类,比如下面函数内部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函数,因此该类可以作为一个县城对象运行。
分享到:
相关推荐
Handler对象中使用匿名内部类或非静态内部类正确地释放消息避免内存泄漏或增加Native内存,在Android中,Handler对象通常会被用来在主线程(UI线程)中处理消息,以更新UI界面。当我们在Handler对象中使用匿名内部类...
1.接口-简介 2.接口-作用 3.接口-定义方式 4.接口-实现 5.接口-与抽象类之区别 6.接口-应用示例(设计模式...内部类-局部内部类 12.内部类-匿名内部类 13.内部类-静态内部类 14.综述
Java内部类是Java言语的一个很重要的概念,《Java编程思想》花了很大的篇幅来讲述这个概念。但是我们在实践中很少用到它,虽然我们在很多时候会被动的使用到它,但它仍然像一个幕后英雄一样,不为我们所知,不为我们...
内部类分类
java 内部类 实例内部类 局部内部类 匿名类 静态内部类 实例代码
java 匿名内部类的使用规范 java 匿名内部类的使用规范 java 匿名内部类的使用规范
Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类Java内部类
相关android开发中内部类 匿名内部类 内部接口 对比说明
实验报告8++内部类与异常类
java 成员内部类使用 内部匿名类 方法参数匿名类 方法匿名类
成员内部类、局部内部类、静态内部类、匿名内部类
主要讲述了JAVA中内部类和匿名内部类的相关问题。
java基础第七章内部类与异常类.doc
java的内部类
反射私有内部类的例子 反射私有内部类的例子反射私有内部类的例子
- 不同类型的内部类(静态内部类、成员内部类、局部内部类和匿名内部类)的区别和用法 - 内部类的优缺点以及使用场景 这些目标将帮助你理解和掌握内部类的概念,并能够在适当的时候使用内部类来解决问题...
java内部类详解
java 利用反射获取内部类静态成员变量的值操作.docx
定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现...
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。内部类可以是静态static的,也可用public,default,protected和private修饰。(而外部顶级类即类名和文件名相同的只能使用public和default)。