泛型 - 混乱

时间:2012-02-01 19:25:40

标签: 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)使用此数据调用其他方法(反射)

我正在做什么/在这里尝试是可能的还是在使它成为通用返回类型的过程中我是否毁了一切?

由于

1 个答案:

答案 0 :(得分:2)

如果您不想返回列表,那么我会通过定义供应商界面来实现,

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);