繁体   English   中英

匿名内部类可以扩展吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM