我如何将参数传递为泛型?

时间:2012-07-14 21:47:45

标签: java generics

我有:

public class<E extends aninterface> AClass{

    public AClass(){
    }

    public void amethod(E element){
        //something
    }

}

public class B implements aninterface{

}

在通话代码中:

aninterface f = new B();
AClass<B> ac = new AClass<B>();
ac.amethod(f);

它表示f是aninterface类型,但参数是“E”类型

如果我不能这样做,我不明白泛型的哪一点?

2 个答案:

答案 0 :(得分:2)

因为AClass<B>.amethod()需要B作为参数。但是你传递的是aninterface

答案 1 :(得分:2)

请注意,引用 f声明属于aninterface类型,而不是类型B。尽管在运行时引用f指向类型为B的实例,但编译器在此处仅查找引用f的声明类型与{{1}之间的对齐B要求。

也许你打算写这个呢?

AClass#amethod(E)

或者也许这样呢?

final aninterface f = new B();
final AClass<? super aninterface> ac = new AClass<aninterface>();
ac.amethod(f);

再次注意,final B f = new B(); final AClass<? super B> ac = new AClass<B>(); ac.amethod(f); B,但不是相反:aninterface不是aninterface。因此,您无法向要求类型为B的参数的方法提供类型aninterface的引用。