Java - 抽象类的匿名实例

时间:2014-11-02 15:12:23

标签: java

类型不匹配无法从BytecodeCodeProcessor<new AbstractBytecodeCodeVisitor(){}>转换为BytecodeCodeProcessor<AbstractBytecodeCodeVisitor>

public abstract class AbstractBytecodeCodeVisitor {
}
public class BytecodeCodeProcessor
     <T extends AbstractBytecodeCodeVisitor> {

     public BytecodeCodeProcessor(ClassSourceResult classSourceResult, 
     T visitor) {

     }
}
BytecodeCodeProcessor<AbstractBytecodeCodeVisitor> processor = 
        new BytecodeCodeProcessor<>(classSourceResult, 
new AbstractBytecodeCodeVisitor() {

});

1 个答案:

答案 0 :(得分:0)

通过new AbstractBytecodeCodeVisitor() {}实例化的匿名类是AbstractBytecodeCodeVisitor的子类。此匿名子类等于BytecodeCodeProcessor<AbstractBytecodeCodeVisitor>指定的泛型类型参数。 Anonymous AbstractBytecodeCodeVisitor!= AbstractBytecodeCodeVisitor,因此编译错误。代码可以通过多种方式修复,其中一些方法列在以下链接中。

Generics and anonymous classes (bug or feature?)

一个解决方案:

BytecodeCodeProcessor<AbstractBytecodeCodeVisitor> processor = 
    new BytecodeCodeProcessor<AbstractBytecodeCodeVisitor>(
        classSourceResult, new AbstractBytecodeCodeVisitor() {}
    );