gpt4 book ai didi

java - 在 Java 中创建泛型类型的随机值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:08:28 24 4
gpt4 key购买 nike

我有以下内容:

public class RandomList {

private List<Integer> list;

public List<Integer> getList() {
return list;
}

public RandomList (int n) {
list = new ArrayList<Integer>();

Random rand = new Random();
rand.setSeed(System.currentTimeMillis());

for (int i=0; i < n; i++)
{
Integer r = rand.nextInt();
list.add(r);
}
}
}

这给了我一个充满随机整数值的列表。我想对此进行概括,以获取随机字符值列表或其他类型的随机值列表。

所以我想要的是泛型版本,class RandomList<T> .我可以用“T”替换所有“Integer”,但卡在 Integer r = rand.nextInt(); 行对于不同的类型,这会有所不同。

我正在考虑执行以下操作:

  1. 将泛型类传入RandomList
  2. 使用instanceof根据所需类型(整数、字符...)检查传入的类,并根据检查返回正确的随机值

这有意义吗?是否有其他/更好的方法来实现我想要的?

最佳答案

第一种方法(劣质)

在 Java 中,您无法检查泛型类型,至少在没有反射的情况下无法检查。你靠泛型赚钱,所以你会做这样的事情:

public class RandomList<T> {
private List<T> list;
private Class<T> clazz;

public List<T> getList() {
return list;
}

public RandomList (Class<T> clazz, int n) {
this.clazz = clazz;
list = new ArrayList<T>();

Random rand = new Random();
rand.setSeed(System.currentTimeMillis());

if (clazz.isAssignableFrom(Integer.class)) {
for (int i = 0; i < n; i++) {
Integer r = rand.nextInt();
list.add(r);
}
}
else {
throw new IllegalArgumentException("Unsupported class: " + clazz.getName());
}
}
}

第二种方法(高级)

或者,您可以进一步概括这一点并添加一个 Function 来生成随机结果。请注意,这需要 Java 8。如果您不使用 Java 8,则可以定义一个接口(interface)并匿名构造它。

public class RandomList<T> {
private List<T> list;

public List<T> getList() {
return list;
}

public RandomList (Function<Random, T> creator, int n) {
list = new ArrayList<T>();

Random rand = new Random();
rand.setSeed(System.currentTimeMillis());

for (int i = 0; i < n; i++) {
list.add(creator.apply(rand));
}
}
}

使用以下方法构造一个新实例:

RandomList<Integer> list = new RandomList<>(rand -> rand.nextInt(), 10);

第三种方法(清洁器)

编辑:我后来想到了这一点,但您似乎使用的是 Java 8,因此您可以只使用流:

List<Integer> list = Stream.generate(() -> rand.nextInt()).limit(10).collect(Collectors.toList())

关于java - 在 Java 中创建泛型类型的随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40325324/

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