我遇到了以下代码,有些困惑。
LocalConfig conf = new LocalConfig() {
@Override
public AppConfigurationEntry[] getAppConfigurationEntry(String name) {
return new AppConfigurationEntry[] {
new AppConfigurationEntry(moduleName(),
AppConfigurationEntry.LoginModuleControlFlag.REQUIRED,
put("principal", RPCConstants.DOMAINUSER).
put("useTicketCache","true").
build())
};
}
};
之后有一个LocalConfig conf = new LocalConfig()
没有分号的代码块。.由于LocalConfig
是用new
I调用的,因此我不确定LocalConfig
编译器如何处理此代码块。欣赏见解。
这是一个匿名类。LocalConfig
可能是需要实现的接口public AppConfigurationEntry[] getAppConfigurationEntry(String name)
。这只是创建接口的临时实现的简便方法。通常的方法是创建一个驻留在其自己.java
文件中的具体实现。
在这里,您将提供一个临时实现,然后将其分配给变量conf
。
例如,假设您有一个接口:
public interface MyInterface {
int foo(String bar);
}
通常,您将创建一个实现(尤其是如果您希望此具体实现具有很多逻辑并被大量重复使用):
public class MyInterfaceImplementation implements MyInterface {
@Override
public int foo(String bar) {
...
return someIntVar;
}
}
然后,您可以使用实例化它MyInterface myInterface = new MyInterfaceImplementation();
。可以这样做,而不是那样做:
MyInterface myInterface = new MyInterface() {
@Override
public int foo(String bar) {
...
return someIntVar;
}
}
有些人避免使用所有匿名类。我认为这取决于用户情况。如果接口很简单(如事件处理程序)并且不太可能被重用,那么我认为内部类很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句