Dav*_* T. 5 java oop anonymous-class
我可以做这个:
new Object(){
public void hi(){}
}.hi();
Run Code Online (Sandbox Code Playgroud)
我该如何(或我可以)做到这一点:
IWouldRatherStayAnonymous t = new IWouldRatherStayAnonymous extends Thread(){
public void NoNoYouCantCallMe(String s){}
};
t.NoNoYouCantCallMe("some useful data that i will need later, but don't want to save this anonymous class");
Run Code Online (Sandbox Code Playgroud)
如果我不能在语法上做到这一点,任何人都可以解释为什么这永远不会起作用的逻辑/实现设计吗?
===========================================
编辑:澄清 - 我想创建一个匿名类而不保存它,然后实例化该匿名类的实例。我只需要 1 个引用,因为我不打算经常使用这个引用(即使在同一个外部类中我也不希望其他任何东西使用它)。但是,我只想将一些数据传递给这个匿名类一次(最好是构造函数,但您会注意到实际上无法重写 Thread() 中的构造函数)。
这确实不是什么大不了的事,我只是好奇这是否可行,但从一些答案来看,它似乎是可行的,但只是不太漂亮。
您的问题有点令人困惑,但听起来您想要一个既扩展Thread又实现某个接口的类,但在它所使用的方法之外无法访问该类(这甚至会排除私有嵌套类)。在这种情况下使用本地类:
void myMethod() {
class Impl extends Thread implements SomeInterface {
@Override
public void someInterfaceMethod(String s){ }
}
new Impl().someInterfaceMethod("data");
}
Run Code Online (Sandbox Code Playgroud)
编辑:为了响应您的更新,您自然可以为本地类提供一个构造函数并传入数据,或者只是让它关闭final外部方法中的变量。
访问匿名类的方法有两种方式:
Java没有提供静态捕获匿名类类型的方法,例如以类似于C#关键字的方式var。
在您的情况下,您可以使用该方法创建一个抽象类型void NoNoYouCantCallMe(String),并使用该类作为匿名类的基础,如下所示:
abstract class MyThreadBase extends Thread {
public abstract void YesICanCallYou(String s);
}
...
MyThreadBase t = new MyThreadBase() {
public void YesICanCallYou(String s){}
};
...
t.YesICanCallYou();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11845 次 |
| 最近记录: |