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

标签 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: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/

相关文章:

java - 使用监听器的正确方法是什么?

java - 在 Windows Server 2012 上安装 TeamCity 时出现错误 "no sqljdbc_auth in java.library.path"

swift - 通用 Controller 内的通用 Swift 协议(protocol)

java - 对 Java 中的泛型感到困惑

java - 谷歌地图制作工具 : iterating over entries in LRU order

Java:如何在反转分割字后将分隔符读回字符串?

java - Android从文件路径获取图像到位图

generics - scala 有没有办法在没有示例实例的情况下生成通用实例?

java - 泛型方法的泛型返回类型

c# - 如何在 C# 中从字符串创建泛型类?