有没有办法访问Java中局部内部类的方法。以下代码是我之前尝试过的示例代码。据此,访问 mInner()
方法的机制是什么?
class Outer{
int a=100;
Object mOuter(){
class Inner{
void mInner(){
int y=200;
System.out.println("mInner..");
System.out.println("y : "+y);
}
}
Inner iob=new Inner();
return iob;
}
}
class Demo{
public static void main(String args[]){
Outer t=new Outer();
Object ob=t.mOuter();
ob.mInner(); // ?need a solution..
}
}
最佳答案
正如 ILikeTau 的评论所说,您无法访问您在方法中定义的类。您可以在方法之外定义它,但另一种可能性是定义一个 interface
(或抽象类)。然后代码仍会在您的方法中,并且可以访问方法中定义的 final
变量和参数(如果将整个类移到外面则无法做到)。像这样的东西:
class Outer {
int a = 100;
public interface AnInterface {
void mInner(); // automatically "public"
}
AnInterface mOuter() { // note that the return type is no longer Object
class Inner implements AnInterface {
@Override
public void mInner() { // must be public
int y = 200;
System.out.println("mInner..");
System.out.println("y : " + y);
}
}
Inner iob = new Inner();
return iob;
}
}
class Demo {
public static void main(String[] args) { // the preferred syntax
Outer t = new Outer();
Outer.AnInterface ob = t.mOuter();
ob.mInner();
}
}
注意:未测试
请注意,返回类型和 ob
的类型已从 Object
更改。这是因为在 Java 中,如果您将某物声明为 Object
,则您只能访问为 Object
定义的方法。编译器必须在编译时(而不是在运行时)知道你的对象 ob
有一个 mInner
方法,它不能告诉它是否唯一的东西知道它是一个 Object
。通过将其更改为 AnInterface
,编译器现在知道它有一个 mInner()
方法。
关于java - Java 局部内部类中的访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32409324/