我在引用到IF语句中定义的内部类时遇到问题,在类外部的方法main中。这是我的代码:
public class Outside {
int IntVar;
public void Condition() {
if (IntVar == 0) {
class Inside {
public void f() {
System.out.println("Inside : f ");
}
}
}
else IntArg = 5;
}
public static void main(String[] args) {
Outside object = new Outside();
object.CreateAnInsideClassCondition();
}
}
如何声明类的新对象Inside并在main中调出方法“f”?附:代码很糟糕但已经改变了
答案 0 :(得分:0)
您无法根据方法中的条件定义成员类。但是你可以像这样使用委托和lambda或匿名内部类:
public class Outside {
public Function<Object,Object> delegate = arg -> null;
int IntVar;
public Outside(int param){
this.IntVar = param;
}
public void Condition() {
if (IntVar == 0) {
delegate = (arg) ->{ System.out.println("text"); return null; };
}
else IntArg = 5;
}
public static void main(String[] args) {
Outside object = new Outside(0);
object.Condition();
object.delegate.apply(null);
}
}
这段代码需要Java8,但是你可以用较旧的代码来实现,不太方便。如果您需要来自Inside.f()的更复杂的行为,您可能希望将lambda替换为匿名内部类。 另请注意,您没有外部构造函数,并且稍微弄乱了方法名称。