gpt4 book ai didi

java - 获取集合的通用类型而不 check out 元素

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

我需要找出 Collection<?> 的泛型类型。唯一的限制是,由于我的缓存机制,我无法撤回第一个元素(如果它包含任何元素) - 所以我无法执行以下操作,因为它实际上获取了第一个值:

collection.iterator().next().getClass();

我的目标是确定 Collection<?> 是否包含其中的任何其他集合,例如 Collection<List<List<String>>>是合格的,而 Collection 则不合格。我收到这个Collection<?>来自作为参数传递的方法调用。我尝试过以下方法:

@Override
public Collection<?> execute(Collection<?> collection) {
Class<?> clazz = collection.getClass();
Type genericSuperClass = clazz.getGenericSuperclass();
ParameterizedType parametrizedType = (ParameterizedType) genericSuperClass;
Type[] typeArguments = parametrizedType.getActualTypeArguments();
String clazzName = typeArguments[0].toString();

// ... irrelevant code
return null;
}

遗憾的是 String clazzName 的结果是而不是 java.util.List<java.util.List<java.lang.Integer>>以下内容:

E

我的另一个尝试是从声明的字段中获取它。

@Override
public Collection<?> execute(Collection<?> collection) {
this.collection= collection;
try {
Field field = Foo.class.getDeclaredField("collection");
ParameterizedType parametrizedType = (ParameterizedType) field.getGenericType();
Type type = parametrizedType .getActualTypeArguments()[0];
} catch ( SecurityException | NoSuchFieldException e) { ... }

// ... irrelevant code
return null;
}

另一方面,这给了我:

?

<小时/>

如果无法使用反射,是否有其他棘手的方法来获取信息,集合是否包含任何集合而不检查第一个元素?

最佳答案

没有。泛型是一种使类型检查在编译时更有用的工具。它们在运行时不存在。

在运行时,集合 只不过是没有更多信息的集合。只有它的内容描述了它包含的内容。

关于java - 获取集合的通用类型而不 check out 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50556686/

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