首页 > 解决方案 > 如何在泛型类中设置随机值

问题描述

我尝试用随机值填充 ArrayLists。Arraylist 可以包含字符串、整数、双精度或字符。创建随机值工作正常,但我的问题是我无法编写我的 insertRandom 方法。它应该插入特定的数据类型(如 double、int 等)。我在下面描述了我希望我的 insertRandom 方法执行的操作。我收到警告“类型缓冲区中的方法插入(T)不适用于参数(int)。我用谷歌搜索但没有发现/不明白如何将我的值类型转换为 T 对象,或者如何检查(类似于“instanceof”所做的),我的 ArrayLists 包含哪些数据类型。我已经阅读了人们在构造函数中用作参数的类类型,但我不允许更改构造函数的参数列表。

public class Buffer <T> {

private ArrayList<T> list;

    // constructor
    public Buffer (int capacity) {
        this.list = new ArrayList<T>();
    }

    // insert items to buffer
    public void insert (T item) {
        list.add(item);
    }

    // insert random values
    public void insertRandom () {

        check if ArrayList is of type String / Integer / Double

        if (ArrayList is-of-type-String) {
           insert("ThisString");
        }
        if (ArrayList is-of-type-Double) {
            insert(3.4);
        }

}

谢谢和最好的问候,帕特里克

标签: javagenericsarraylist

解决方案


假设即使您使用泛型并且T是 Double,也无法向其添加String。这意味着没有必要检查类的类型。

Buffer<Double> bd = new Buffer(10);
bd.insert(22.9);
bd.insert("string"); // compiler error

我认为您在这里不需要泛型。您只需要一个Buffer<Object>,因为根据您的要求,您需要添加字符串、整数、双精度或字符。所以你甚至不需要做类型检查。

就像是:

Buffer<Object> buff = new Buffer<Object>(10);
buff.insert(22.9);
buff.insert("");
buff.insert(13);

推荐阅读