如何在泛型类中定义具体类型构造函数

时间:2017-03-20 17:33:24

标签: java generics

尝试在泛型类中定义具体类型构造函数,但出现以下错误。谁知道如何解决这个问题?感谢。

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错误

2 个答案:

答案 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) {