[英]can anonymous inner classes extend?
我想创建一个扩展另一个类的匿名内部类。
实际上,我想要执行的操作如下:
for(final e:list){
Callable<V> l = new MyCallable(e.v) extends Callable<V>(){
private e;//updated by constructor
@Override
public V call() throws Exception {
if(e != null) return e;
else{
//do something heavy
}
}
};
FutureTask<V> f = new FutureTask<V>(l);
futureLoadingtask.run();
}
}
这可能吗?
您不能给匿名类命名,这就是为什么它被称为“匿名”的原因。 我看到的唯一选择是从Callable
的外部范围引用final
变量
// Your outer loop
for (;;) {
// Create some final declaration of `e`
final E e = ...
Callable<E> c = new Callable<E> {
// You can have class variables
private String x;
// This is the only way to implement constructor logic in anonymous classes:
{
// do something with e in the constructor
x = e.toString();
}
E call(){
if(e != null) return e;
else {
// long task here....
}
}
}
}
另一个选择是像这样定义一个本地类(不是匿名类):
public void myMethod() {
// ...
class MyCallable<E> implements Callable<E> {
public MyCallable(E e) {
// Constructor
}
E call() {
// Implementation...
}
}
// Now you can use that "local" class (not anonymous)
MyCallable<String> my = new MyCallable<String>("abc");
// ...
}
如果您还需要更多,请创建一个常规的MyCallable
类。
extend关键字仅允许在类定义中使用。 不允许参加匿名课程。
匿名类的定义是: 没有任何名称的类,声明后不使用。
我们必须按以下方式更正您的代码(例如):
Callable<String> test = new Callable<String>()
{
@Override
public String call() throws Exception
{
return "Hello World";
}
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.