【发布时间】:2021-05-21 01:14:51
【问题描述】:
我在泛型类 Jet 中继承泛型类 Vehicle,另外还有两个变量名为 T4 和 T5。在覆盖父类的setName(T ) 函数时,我收到一条错误消息Error:(27, 17) java: name clash: setName(T1) in Jet and setName(T1) in Vehicle have the same erasure, yet neither overrides the other
class Vehicle <T1,T2,T3 extends Number>{
private T1 name;
private T2 company;
private T3 price;
public void setName(T1 name){
this.name=name;
}
public void setCompany(T2 company){
this.company=company;
}
public void setPrice(T3 price){
this.price=price;
}
public T1 getName(){
return name;
}
public T2 getCompany(){
return company;
}
public T3 getPrice(){
return price;
}
}
class Jet <T5,T2,T3,T4> extends Vehicle{
T4 jetEngine;
T5 name;
public void setName(T5 name){ //causing an error here
this.name = name;
System.out.println("Yeah you can do that");
}
public void setJetEngine(T4 jetEngine){
this.jetEngine=jetEngine;
}
public T4 getJetEngine(){
return jetEngine;
}
}
【问题讨论】:
-
您将
Vehicle扩展为原始类型。你的意思是像extends Vehicle<T5, T2, T3>这样的东西吗? -
是的,我想用 T5 和 setName(T5 obj) 更改 T1
-
如果这是您的意图,请编辑您的问题以解决该问题。
标签: java generics inheritance overriding