Java中的局部内部类
对于下面的代码示例,当我们执行代码时,它将打印: 从实例方法 来自本地内部类 现在,如果我只想执行本地内部类方法m2,并希望输出为: 来自本地内部类Java中的局部内部类,java,inner-classes,Java,Inner Classes,对于下面的代码示例,当我们执行代码时,它将打印: 从实例方法 来自本地内部类 现在,如果我只想执行本地内部类方法m2,并希望输出为: 来自本地内部类 当完全需要本地内部类时,具体的用例是什么?如果没有本地内部类,某些功能可能无法实现。我看不出您的意图,也许您希望将方法的创建与方法的调用分开,将所有实现细节隐藏在内部类中?如果是这样的话,这个怎么样 首先创建一个接口,这样您就知道要访问的类型比反射类型更整洁 interface X { void m2() } 现在,方法m1返回类实现接口
当完全需要本地内部类时,具体的用例是什么?如果没有本地内部类,某些功能可能无法实现。我看不出您的意图,也许您希望将方法的创建与方法的调用分开,将所有实现细节隐藏在内部类中?如果是这样的话,这个怎么样 首先创建一个接口,这样您就知道要访问的类型比反射类型更整洁
interface X {
void m2()
}
现在,方法m1返回类实现接口的实例
class A {
X m1() {
class B {
void m2() {
System.out.println("from local inner class");
}
}
B b = new B();
return b;
}
public static void main(String[] args) {
A a = new A();
// call m1() to get an instance of interface X
X x = a.m1();
// invoke method on interface instance
x.m2()
}
}
这将创建封装在类中的方法(比如“functor”)与调用该方法分开 您可以从函数返回本地类类型的对象,并通过反射对其调用方法,例如,以下工作:
class A {
Object m1() {
class B {
public void m2() {
System.out.println("from local inner class");
}
}
System.out.println("from instance method");
B b = new B();
b.m2();
return b;
}
public static void main(String[] args) {
try {
A a = new A();
Object obj = a.m1();
obj.getClass().getMethod("m2").invoke(obj);
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
你应该这样做吗?可能不会。如果您只想执行一个println,那么。。。犯错误移除另一个?我想知道,有没有一种方法可以只执行m2?方法的局部性的想法是,它应该只在该方法中使用。因此,如果您想从m1外部调用m2,为什么要将B设为m1的本地呢?我想知道,有没有一种方法可以只执行m2?从技术上讲,是的。您可以让m1返回一个B的对象,然后使用反射在m1之外调用m2,我认为.m2在m1方法之外是不可见的。要仅执行m2,请向m1方法添加一个布尔参数,并使用if语句来决定是只执行m2还是整个m1
class A {
Object m1() {
class B {
public void m2() {
System.out.println("from local inner class");
}
}
System.out.println("from instance method");
B b = new B();
b.m2();
return b;
}
public static void main(String[] args) {
try {
A a = new A();
Object obj = a.m1();
obj.getClass().getMethod("m2").invoke(obj);
} catch (Exception e) {
System.out.println(e.toString());
}
}
}