gpt4 book ai didi

java - 将数据添加到java中的通用集合

转载 作者:行者123 更新时间:2023-11-29 05:07:56 24 4
gpt4 key购买 nike

有什么方法可以将数据添加到 Java 中的通用集合中。例如:-

import java.util.List;
import java.util.Vector;

public class testGenerics {
public static void main(String args[]) {
Vector<? extends Number> superNumberList = null;

// I can do this
Vector<Integer> subList = new Vector<Integer>();
subList.add(2);
superNumberList = subList;

// But i cannot do this
// Gives the below compilation error.
//The method add(capture#2-of ? extends Number) in the type
//Vector<capture#2-of ? extends Number> is not applicable for the arguments (Integer)
superNumberList = new Vector<Integer>();
superNumberList.add(new Integer(4));

superNumberList = new Vector<Float>();
superNumberList.add(new Float(4));
}

}

正如我在评论中提到的,当我尝试将 Integer 或 Float 数据添加到 superNumberList 时出现编译错误。

我能够以第一种方式做到这一点,但我想以第二种方式做到这一点,但不确定为什么 Java 不允许我以第二种方式做到这一点。

我有一个合适的地方,我有一个父类(super class),它有这个 superNumberList,所有子类都试图使用这个相同的变量,但在这个集合中有不同的数据类型,如 Integer 、 Float 等。

最佳答案

A Vector<? extends Number>是未知数字类型的 vector 。因此,您不能向其中添加任何内容

可能是 Vector<Float> .所以你不能添加 Integer .

但它也可以是 Vector<Integer> .所以你不能添加 Float .

您唯一知道的是,无论您从 Vector 中拉出什么, 都将是一个 Number。 .


如果您的父类(super class)具有 Integer 的子类, Float等等,你应该使父类(super class)通用:

class SuperClassWithVector<T extends Number>{
protected Vector<T> myVector;
}

class FloatSubClass extends SuperClassWithVector<Float>{
// here myVector takes Float
}

如果你想要一个Vector可以兼顾 IntegerFloat (不确定这是否是您想要的),那么您可以使用 Vector<Number> .

关于java - 将数据添加到java中的通用集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29730284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com