参数化原始类型

时间:2018-03-22 08:43:40

标签: java generics

我有Vector这样:

Vector myVector = new Vector();

自定义类的ArrayList,其中包含nString秒。

基本上,我将一个空项添加到Vector中的第一个位置(myVector.insertElementAt("", 0);),然后添加(通常)来自ArrayList的其余项目(取决于需要)。然后,此Vector用作DefaultComboBoxModel的{​​{1}}。

现在,我得到通常的警告引用类型Vector的引用应该参数化

这些项目属于JComboBox类型,但我无法使用String,因为添加Vector<String>中的项目(使用ArrayList)将无效:

类型为Vector(String)的方法add(String)不适用于参数(CustomClass)。

我无法使用.add(),因为Vector(CustomClass)会引发摇摆不定。

所以我的问题是:使用insertElementAt或根本不参数化类型是否安全?

我可以使用Vector(Object)并投射所有内容但会出现类型安全错误。

1 个答案:

答案 0 :(得分:1)

  

我不能使用Vector,因为从ArrayList添加项目(使用.add())将不起作用:

     
    

Vector(String)类型中的方法add(String)不适用于参数(CustomClass)。

  

因此,您正尝试将ArrayList<CustomClass>中的内容添加到您希望仅包含Vector元素的String

如果您使用的是原始类型Vector,则可以执行此操作,但如果您尝试对Vector中被视为“{1}}的元素执行任何操作,则会失败。 String,因为它不是。

如果您希望Vector包含String,请添加String

myVector.add(thingFromArrayList.toString());

(或其他一些将thingFromArrayList转换为String

的方法

然后您可以将<String>添加到myVector的类型。