这段java代码是什么意思
我遇到了下面的代码,有点困惑这段java代码是什么意思,java,syntax,Java,Syntax,我遇到了下面的代码,有点困惑 LocalConfig conf = new LocalConfig() { @Override public AppConfigurationEntry[] getAppConfigurationEntry(String name) { return new AppConfigurationEntry[] { new AppConfigurationEntry(moduleName(), AppConfigu
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
调用的,我不确定编译器如何处理LocalConfig
之后的这个块。欣赏见解 它是匿名类,因为LocalConfig是接口,所以需要实现它。
所以当你实例化的时候,你应该有一个实现,但是当你没有它的时候,你会在运行中创建它
当您不想创建一个可重用的自己的实现,而只是覆盖一个特定的案例或解决方案时,您可以使用这种方法。此外,这在GUI方法中非常有用,它被称为匿名类-您可以“动态”实例化不存在的类的对象,而不将其持久化为类,并且能够当场覆盖/实现抽象方法。这是一个匿名类。它定义了一个扩展/实现
LocalConfig
而不给它命名的类,实例化该类并将其分配给名为conf
的变量,这是一个匿名类LocalConfig
可能是一个接口,它需要实现公共AppConfigurationEntry[]getAppConfigurationEntry(字符串名称)。这只是创建接口的临时实现的一种简单方法。通常的方法是创建一个具体的实现,它驻留在自己的.java
文件中
这里您提供了一个特殊的实现,然后将其分配给变量conf
例如,假设您有一个接口:
public interface MyInterface {
int foo(String bar);
}
通常,您会创建一个实现(特别是如果您希望这个具体的实现具有大量的逻辑并被大量重用):
然后使用MyInterface MyInterface=newmyinterfaceimplementation()实例化它代码>。不必这样做,您可以创建一个特殊的实现,如下所示:
MyInterface myInterface = new MyInterface() {
@Override
public int foo(String bar) {
...
return someIntVar;
}
}
有些人避免使用所有和任何匿名类。我认为这取决于用户情况。如果接口很简单(像事件处理程序)并且不太可能被重用,那么我认为内部类就可以了。如果您只需要一次特定的子类,就可以动态重写类(或实现接口)。代码就是这样做的:它创建了一个新的LocalConfig
实例,但对其进行了扩展(在本例中,覆盖了getAppCOnfigurationEntry()
,这是一个匿名的内部类。它是一个实现或扩展LocalConfig的类,但新类本身没有名称。Hm.6在不到一分钟的时间内给出了答案,所有答案似乎都是正确的(至少几乎)正确?;)
MyInterface myInterface = new MyInterface() {
@Override
public int foo(String bar) {
...
return someIntVar;
}
}