java - 参数化原始类型

标签 java generics

我有一个Vector像这样:

Vector myVector = new Vector();

还有一个ArrayList包含 n 的自定义类的金额String s。

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

现在,我收到了常见的警告对泛型类型 Vector 的引用应该参数化

这些项目的类型为 String ,但我不能使用Vector<String>因为添加 ArrayList 中的项目(使用 .add() )将不起作用:

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

我无法使用 Vector(CustomClass)因为那时insertElementAt抛出一个摇晃器。

所以我的问题是:仅使用 Vector(Object) 是否安全?或者根本不参数化类型?

我可以使用T并强制转换所有内容,但会出现类型安全错误。

最佳答案

I can't use Vector because adding the items from the ArrayList (using .add()) won't work as:

The method add(String) in the type Vector(String) is not applicable for the arguments (CustomClass).

所以,您正在尝试从 ArrayList<CustomClass> 添加内容到 Vector您期望仅包含 String元素。

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

如果你想要Vector包含String s,添加 String :

myVector.add(thingFromArrayList.toString());

(或将 thingFromArrayList 转换为 String 的其他方法)

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

关于java - 参数化原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49424041/

相关文章:

java - @Target(ElementType.ANNOTATION_TYPE) 如何工作

c# - 泛型开放和封闭构造类型

c# - 编译时错误 父类(super class)型集合引用所引用的子类型集合对象

c# - 为什么通用接口(interface)在默认情况下不是协变/逆变的?

c# - "Class does not implement interface member"类实现通用接口(interface)时出错

java - 如何创建 Java 独立应用程序

java - 生产者使用者代码问题(似乎Notify方法不会释放循环内的锁)

java - JavaME中如何获取抽象类(Object)的Class?

java - Displaytag 对我的表格进行排序,但仅在第一页

java - 如何避免java中自引用类型安全接口(interface)的参数类型警告?