尝试在泛型类中定义具体类型构造函数,但出现以下错误。谁知道如何解决这个问题?感谢。
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重新编译:详细以获得完整输出 1错误
答案 0 :(得分:2)
如果您正在尝试为包含字符串的堆栈定义构造函数,则不能。构造函数和其他实例方法必须适用于类型变量边界内的所有类型。
但您可以定义一个静态工厂方法,该方法仅创建GenericStack<String>
的实例:
static GenericStack<String> create(String e) {
GenericStack<String> s = new GenericStack<>();
s.push(e);
return s;
}
答案 1 :(得分:1)
定义构造函数参数以匹配为类
定义的类型public GenericStack(E a) {