java - 泛型 - 困惑

标签 java generics reflection

public <X> X createData(int n)
{
    int[] values = new int[n];
    Random rand = new Random();
    for(int i = 0; i < n; i++)
    {
        values[i] = rand.nextInt(100);
    }
    JOptionPane.showMessageDialog(null, values.length);
    return (X )values;
}

您好,我拼凑了一个小方法来返回 int 数组作为泛型类型(我认为?)

重点是,我要调用一个用户方法,该方法将为我生成一些数据,然后我获取该数据并调用他们选择的方法。

问题是,当我调用此方法时,如何将泛型类型转换为其“正确”类型,以便它使用此数据调用该方法。

通常我的流程是

1)调用用户方法来获取他们的数据(反射)

2)使用这些数据来调用他们的其他方法(反射)

我在这里所做/尝试的事情是否可能,或者在使其成为通用返回类型的过程中,我会毁掉一切吗?

谢谢

最佳答案

如果您不想返回列表,那么我会通过定义供应商接口(interface)来实现,

public interface Supplier<T> extends Serializable {
    public T get();
}

可以定义为,

public <X> List<X> createData(Supplier<X> datum, Integer length){
    List<X> values = new ArrayList<X>();
    for(int i = 0; i < length; i++)
    {
        values.add(datum.get());
    }
    JOptionPane.showMessageDialog(null, values.size());
    return values;
}

并且可以用作,

List<Integer> ints = createData(new Supplier<Integer>() {
        Random rand = new Random();

        @Override
        public Integer get() {
            return rand.nextInt(100);
        }
    }, 10);

关于java - 泛型 - 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9101910/

相关文章:

java - 来自 IIS 7.0 的信息

java - 我如何才能将 ArrayList<String> 插入到接受 List<Integer> 的构造函数中?

c# - 隐藏三元运算符的扩展

android - 由意外的 DEX 解析的类;

c# - 代码编译方法中函数执行的计数

java - 哪个tomcat版本适合java 8

java - Minecraft 红石模拟器的替代方法

java - 在java中用时区解析时间戳?

angular - 将复杂对象转换为查询字符串

java - 在 Java 中为泛型预定义乘法