尝试在泛型类中定义具体类型构造函数,但出现以下错误。有人知道如何解决这个问题吗?谢谢。
public class GenericStack<E>{
private java.util.ArrayList<E> list=new java.util.ArrayList<>();
public GenericStack(String a){
this.push(a);
}
public int getSize(){
return list.size();
}
public E peek(){
return list.get(getSize()-1);
}
public void push(E o){
list.add(o);
}
public E pop(){
E o=list.get(getSize()-1);
list.remove(getSize()-1);
return o;
}
boolean isEmpety(){
return list.isEmpty();
}
@Override
public String toString(){
return "Stack"+list.toString();
}
public static void main(String[] args){
GenericStack<String> stack1=new GenericStack<>("testmessage");
System.out.println(stack1);
}
}
出现以下错误:
GenericStack.java:6: error: incompatible types: String cannot be converted to E
this.push(a);
^
where E is a type-variable:
E extends Object declared in class GenericStack
注意:一些消息已被简化;使用 -Xdiags:verbose 重新编译以获得完整输出 1 个错误
最佳答案
如果您尝试为包含字符串的堆栈定义构造函数,则不能。构造函数和其他实例方法必须适用于类型变量范围内的所有类型。
但是你可以定义一个静态工厂方法,它只创建 GenericStack<String>
的实例:
static GenericStack<String> create(String e) {
GenericStack<String> s = new GenericStack<>();
s.push(e);
return s;
}
关于java - 如何在泛型类中定义具体类型构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42910263/