本文介绍了匿名内部类可以扩展吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想创建一个扩展另一个类的匿名内部类。
I want to create an anonymous inner class that extends another class.
我想要做的事情实际上如下:
What I want to do is actually something like the following:
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
You cannot give a name to your anonymous class, that's why it's called "anonymous". The only option I see is to reference a final
variable from the outer scope of your Callable
// 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....
}
}
}
}
另一种选择是对本地类(非匿名类)的范围如下:
Another option is to scope a local class (not anonymous class) like this:
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
类......
If you need more than that, create a regular MyCallable
class...
这篇关于匿名内部类可以扩展吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!