本文介绍了匿名内部类可以扩展吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我想创建一个扩展另一个类的匿名内部类。

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...

这篇关于匿名内部类可以扩展吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-08 00:09