我有一些嵌套在另一个中的类
public abstract class I
{
public abstract int f();
}
public class J
{
private List<I> li;
public J(List<I> l)
{
li = l;
}
}
public class A // first class
{
private int x; // field of A
public class B extends J // second class
{
public B()
{
super(new ArrayList<I>() // super call
{{ // array initializer
add(new I() // third class
{
@Override
public int f()
{
return x; // <- here!!!
}
});
}});
}
}
}
在这些条件下,我收到错误:&#34;错误:没有类型A的封闭实例在范围内&#34;。从此设置中删除任何元素可修复此错误。另外,使用x并将其保存到另一个变量然后使用该变量也可以。
这里发生了什么?对我来说,它似乎是编译器中的一个错误。
答案 0 :(得分:0)
不允许在一个Java文件中有2个公共类,文件名应与公共类名相同。
答案 1 :(得分:0)
为了试验您的代码,我创建了一个新的Test
类。我看到没有报告错误(使用Java 8)。也许这是一个构建问题。
public class Test {
public abstract class I {
public abstract int f();
}
public class J {
private List<I> li;
public J(List<I> l) {
li = l;
}
}
public class A // first class
{
private int x; // field of A
public class B extends J // second class
{
public B() {
super(new ArrayList<I>() // super call
{
{ // array initializer
add(new I() // third class
{
@Override
public int f() {
return x; // <- here!!!
}
});
}
});
}
}
}
public void test() {
System.out.println("Hello");
}
public static void main(String args[]) {
//<editor-fold defaultstate="collapsed" desc="test">
try {
new Test().test();
} catch (Throwable t) {
t.printStackTrace(System.err);
}
//</editor-fold>
}
}
Java 7似乎也接受了这段代码。