您可以创建匿名类的Java数组吗?

您可以创建匿名类的Java数组吗?,java,arrays,class,anonymous-class,Java,Arrays,Class,Anonymous Class,我想知道是否可以创建Java匿名类的数组。例如,我尝试以下代码: final var anonArray=新对象(){ 公共字符串foo=“bar”; }[4]; 但是,这会给出一个错误:错误:需要数组,但找到了。这可能吗?请记住,新对象(){…}提供的是值而不是类型 下面是创建匿名类实例数组的方法: final Object[] anonArray = new Object[]{ new Object(){ public String foo = "bar

我想知道是否可以创建Java匿名类的数组。例如,我尝试以下代码:

final var anonArray=新对象(){
公共字符串foo=“bar”;
}[4];

但是,这会给出一个错误:
错误:需要数组,但找到了
。这可能吗?

请记住,
新对象(){…}
提供的是值而不是类型

下面是创建匿名类实例数组的方法:

final Object[] anonArray = new Object[]{
     new Object(){
        public String foo = "bar1";
     }, 
     new Object(){
        public String foo = "bar2";
     },
     new Object(){
        public String foo = "bar3";
     },
     new Object(){
        public String foo = "bar4";
     }
};
或者,如果希望一个数组具有相同的匿名类实例4次:

final Object anonInstance = new Object(){
    public String foo = "bar1";
};
final Object[] anonArray = new Object[]{
     anonInstance, anonInstance, anonInstance, anonInstance
};
或者,如果您想要相同匿名类的4个不同实例:

final Object[] anonArray = new Object[4];
for (int i = 0; i < anonArray.length; i++) {

    // Just to show we can do this ....
    final String bar = "bar" + 1;

    anonArray[i] = new Object(){
        public String foo = bar;  // Look!
    };
}
final Object[]anonArray=新对象[4];
for(int i=0;i
请注意,在上述所有类型中,数组类型都是
Object[]
而不是“Object
的匿名子类的数组”。很难想象这会有什么影响,但如果真的有什么影响,您需要借助反射来创建数组类。(见@ernest_k's)


或者只声明一个适当自定义类或接口的数组,并从该类/接口创建一个非子类。
Object
的匿名子类并不实用…

语法
newobject(){}
创建匿名类的实例。它不提供声明匿名类数组的方法

确实不应该这样做,但是如果需要将匿名类作为数组的组件类型,可以使用
java.lang.reflect.array

Object o = new Object() {
    public String foo = "bar";
};

Object[] anonArray = (Object[]) java.lang.reflect.Array.newInstance(o.getClass(), 4);
anonArray[0] = o;
这可能很难通过代码审查(如果没有反射,就无法构造其他元素)。因此,另一种选择是:在方法中声明一个本地类:

class Anon {
    public String foo = "bar";
};

Anon[] anonArray = new Anon[4];

上面的
Anon
是该方法的本地特性(这是该语言未充分利用的特性)

>请记住,new Object(){…}为您提供的是一个值,而不是一个类型。啊,我完全忘了。谢谢。我不知道Java有本地类!我最近刚发现Kotlin在抱怨
class
即使在方法中也是一个保留关键字之后拥有了它们,我对此感到非常惊讶,但看到Java与它们在一起,我真的感到惊讶。非常感谢。