起初我寫:private ArrayList<Integer> getDataList() { ArrayList<Integer> dataList = new ArrayList<>(LEN); for (int i = 0; i < LEN; i++) dataList.add(i); Collections.shuffle(dataList); return dataList;}后來我決定使用泛型:private <E> ArrayList<E> getDataList() { ArrayList<E> dataList = new ArrayList<>(LEN); for (int i = 0; i < LEN; i++) dataList.add(/* a procedure that generates E instance from index i*/); Collections.shuffle(dataList); return dataList;}接口中的靜態方法不可覆蓋,因此不能調用 E 上的靜態方法來生成實例。如何重構它以使用泛型?謝謝。
1 回答

千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
您需要提供一些作為方法參數進行創建的東西:
private <E> ArrayList<E> getDataList(IntFunction<? extends E> fn) {
然后:
dataList.add(fn.apply(i));
并像這樣調用:
List<Integer> integerList = getDataList(Integer::valueOf); // Same output as non-generic code.
List<String> stringList = getDataList(i -> "Item " + i);
添加回答
舉報
0/150
提交
取消