我在下面的代码中有点混乱。在第一个代码和接口实例化并创建了对象i:
Inter i=new Inter() {
@Override
public void work() { //CODE:1
System.out.println("work work work work work work");
}
}.work() ; //this won't worrk gives error:can't covert void to Inter
但是如果我在不创建对象的情况下实例化它一切正常:
new Inter() { //no object created
@Override
public void work() { //CODE:2
System.out.println("CODE2: work work work work");
}
}.work(); //this is printing in the console
有人可以告诉我是什么原因?如果创建了对象i,为什么代码不起作用?
答案 0 :(得分:1)
上面的实现没有工作,因为如果你看起来关闭了错误。
错误是Type mismatch: cannot convert from void to Inter
您在最后调用方法work()
,因此它被视为方法调用,而您的work()
具有返回类型void
,因此它会抛出异常。删除work()
的链式调用它适用于您。
Inter i=new Inter() {
@Override
public void work() { //CODE:1
System.out.println("work work work work work work");
}
}.work() ; //this won't worrk gives error:can't covert void to Inter
如果您将上述代码更改为低于1,那么它将起作用。
Inter i=new Inter() {
@Override
public void work() { //CODE:1
System.out.println("work work work work work work");
}
};
i.work();