Sav*_*ake 6 java inner-classes
有没有办法在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..
}
}
Run Code Online (Sandbox Code Playgroud)
正如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();
}
}
Run Code Online (Sandbox Code Playgroud)
注意:未经测试
请注意,返回类型和类型ob已更改Object.那是因为在Java中,如果你声明某个东西Object,你只能访问为其定义的方法Object.编译器必须在编译时(不是在运行时)知道你的对象ob有一个mInner方法,并且它不知道它是否知道它是唯一的东西Object.通过将其更改为AnInterface,编译器现在知道它有一个mInner()方法.
| 归档时间: |
|
| 查看次数: |
1626 次 |
| 最近记录: |