Java 如何将参数作为泛型传递?
我有:Java 如何将参数作为泛型传递?,java,generics,Java,Generics,我有: 公共类AClass{ 公共AClass(){ } 公共空间法(E元素){ //某物 } } 公共类B实现了一个接口{ } 呼叫代码: public class<E extends aninterface> AClass{ public AClass(){ } public void amethod(E element){ //something } } public class B implements aninter
公共类AClass{
公共AClass(){
}
公共空间法(E元素){
//某物
}
}
公共类B实现了一个接口{
}
呼叫代码:
public class<E extends aninterface> AClass{
public AClass(){
}
public void amethod(E element){
//something
}
}
public class B implements aninterface{
}
a接口f=new B();
AClass ac=新的AClass();
ac.amethod(f);
它说f是type接口,但参数是type'E'
如果我不能做到这一点,我不明白泛型的意义是什么?因为AClass.amethod()
需要一个B
作为参数。但是你要给它传递一个接口
,因为AClass.amethod()
需要一个B
作为参数。但是您正在传递一个接口
注意,引用f
被声明为接口类型
——而不是B
类型。尽管在运行时引用f
指向类型B
的实例,编译器在这里只寻找引用f
的声明类型与AClass(E)
所要求的B
之间的对齐
也许你是想写这个
aninterface f = new B();
AClass<B> ac = new AClass<B>();
ac.amethod(f);
final aninterface f = new B();
final AClass<? super aninterface> ac = new AClass<aninterface>();
ac.amethod(f);
final a接口f=new B();
最后一级注意,引用f
声明为a接口类型,而不是B
类型。尽管在运行时引用f
指向类型B
的实例,编译器在这里只寻找引用f
的声明类型与AClass(E)
所要求的B
之间的对齐
也许你是想写这个
aninterface f = new B();
AClass<B> ac = new AClass<B>();
ac.amethod(f);
final aninterface f = new B();
final AClass<? super aninterface> ac = new AClass<aninterface>();
ac.amethod(f);
final a接口f=new B();
最后一个aclass这个例子首先与泛型有什么关系?泛型不允许没有它们就做不到的事情。他们只是帮你省下一些打字时间。如果你在没有泛型的情况下重写你的代码,那么显然它是不起作用的。把“E”改成“接口”,它就起作用了……是的,它会起作用,还有?也许你认为它应该起作用,因为f实际上是B?好的,这在python、ruby或php中可以工作,但在java和c#中不行;或者将接口b=new b()插入该方法!!!是的,因为B
它扩展/实现了接口。或者,换言之,B
是一个接口
,加上其他一些东西,可以在需要接口的任何地方使用。事实并非如此。当您需要B
时,不能使用a接口
。这个示例首先与泛型有什么关系?泛型不允许没有它们就做不到的事情。他们只是帮你省下一些打字时间。如果你在没有泛型的情况下重写你的代码,那么显然它是不起作用的。把“E”改成“接口”,它就起作用了……是的,它会起作用,还有?也许你认为它应该起作用,因为f实际上是B?好的,这在python、ruby或php中可以工作,但在java和c#中不行;或者将接口b=new b()插入该方法!!!是的,因为B
它扩展/实现了接口。或者,换言之,B
是一个接口
,加上其他一些东西,可以在需要接口的任何地方使用。事实并非如此。当您需要B
时,您不能使用a接口
。但是B实现了一个接口动态绑定?@peroni_santo:的确如此。但“动态”意味着“在运行时”。编译器处理静态类型信息,因此会出现错误消息。@peroni_santo:aB
是一个接口
,但a接口
不一定是aB
,而是B实现了一个接口-动态绑定?@peroni_santo:确实如此。但“动态”意味着“在运行时”。编译器使用静态类型信息,因此会出现错误消息。@peroni_santo:aB
是一个接口
,但a接口
不一定是一个B