gpt4 book ai didi

java - 获取类定义中泛型的参数化类型

转载 作者:行者123 更新时间:2023-11-30 12:03:31 24 4
gpt4 key购买 nike

我正在编写一个接受参数化类型的类,我正在尝试对其进行参数化。

所以我有一个具有 ID 的用户对象。我正在使 ID 成为参数化类型。我有一门课叫 Router需要提供一种方法 T route(List<T>); , 其中T extends User .

Router内我有一些实用程序方法,我需要在其中按用户中的 ID 进行分组,这也是参数化的。所以User看起来像 User<K> , 其中K是 ID 的类型。所以我会在 Router 中使用如下所示的方法:

public T route(List<T> listToRoute) {
Map<K, Double> someUtilityMap = groupValueById(listToRoute);
// apply some logic
return chooseFinalCandidate(someUtilityMap);
}

目前我有:

public class Router<K, T extends User<K>> {

是否有更简洁的方式来获取和引用 KRouter 内调用者不必在实例化中显式提供它?我能不能给T然后使用 KRouter执行?

我需要引用 K明确地在代码中,所以像这样:

Map<K, Double> groupValueById(List<T> routingCandidates) {

我想做的是:

new Router<User<Integer>>();

相对于:

new Router<Integer, User<Integer>>();

最佳答案

我建议您将签名或您的类(class)更改为 public class Router2<K> .

目前,我明白了,你有类似的东西

public class Router<K, T extends User<K>> {
Map<K, Double> groupValueById(List<T> routingCandidates) {
return null;
}
}

然后像这样调用它

List<User<Integer>> list = new ArrayList<>();
Router<Integer, User<Integer>> router = new Router<>();
Map<Integer, Double> map = router.groupValueById(list);

你可以把它改成类似

public class Router<K> {
<T extends User<K>> Map<K, Double> groupValueById(List<T> routingCandidates) {
return null;
}
}

然后像这样调用它

List<User<Integer>> list = new ArrayList<>();
Router<Integer> router = new Router<>();
Map<Integer, Double> map = router.groupValueById(list);

虽然看起来我们只是将问题转移到另一个地方,但它使类的使用变得更加简单,因为您在使用该方法时不需要写下泛型类型参数。

我认为这里有两个概念,必须分开:

  1. 类的类型参数
  2. 类操作的类型

唯一事先不知道且必须填写的可变类型是 K .当你知道K , 你可以导出 User<K>从中。 User总是一样的。所以这个类应该只有一个类型参数:K .这足以定义具体类。

该类对 User<K> 类型的对象进行操作.您尝试通过类型参数来表达这一点,但这不是泛型的目的。我不知道有什么方法可以捕获 K来自 User<K>我认为这里没有必要。这只会使定义变得比必要的更复杂。

关于java - 获取类定义中泛型的参数化类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57731936/

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