Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这段java代码是什么意思_Java_Syntax - Fatal编程技术网

这段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;
    }
}