在IF语句中定义内部类

时间:2015-02-17 19:18:11

标签: java if-statement

我在引用到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”?附:代码很糟糕但已经改变了

1 个答案:

答案 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替换为匿名内部类。 另请注意,您没有外部构造函数,并且稍微弄乱了方法名称。