public class Main{
private MyQueue queue = null;
private MyStack stack = null;
private MyList list = null;
public static void main(String args[]){
Main m = new Main();
m.run();
}
public void run(){
// only one data structure is not null.
// for example, let's suppose that it's queue
this.queue = new MyQueue();
int intToAdd = 6; // I want to add this number
this.selectStruct().insert(intToAdd); // I want to invoke the "insert" method of the current data structure in use
}
private <T> T selectStruct(){ // this should check with data structure is in use (so which of them is not null) and then return the reference
if (this.queue!=null){
return this.queue;
}
if (this.stack!=null){
return this.stack;
}
if (this.list!=null){
return this.list;
}
}
}
我想用这个叫做 selectStruct
选择当前使用的数据结构并返回引用。从这个参考号打电话给 insert
调用正确类的正确insert方法。
问题是我有几个错误。我从未使用过泛型,所以我有点困惑。
$ javac Main.java
Main.java:22: error: incompatible types: MyQueue cannot be converted to T
return this.queue;
^
where T is a type-variable:
T extends Object declared in method <T>selectStruct()
Main.java:25: error: incompatible types: MyStack cannot be converted to T
return this.stack;
^
where T is a type-variable:
T extends Object declared in method <T>selectStruct()
Main.java:28: error: incompatible types: MyList cannot be converted to T
return this.list;
^
where T is a type-variable:
T extends Object declared in method <T>selectStruct()
Main.java:17: error: cannot find symbol
this.selectStruct().insert(intToAdd);
^
symbol: method insert(int)
location: class Object
4 errors
2条答案
按热度按时间lnlaulya1#
让
MyQueue
,MyStack
,和MyList
实现包含所有数据结构要实现的方法的相同接口,例如:你的课程应该是这样的:
最后,您可以修改
selectStruct()
返回idatastructure的方法:4smxwvx52#
当您用类型参数t(如
private <T> T selectStruct()
),您的意思是此方法的用户可以选择要使用此方法的任何类型。所以在我们的身体里
selectStruct
,您不知道调用者将使用哪种类型,当然也不能返回任何特定类型。所以你的每一个退货条款return this.queue;
将产生错误。