gpt4 book ai didi

java - 如何定义可以具有类型 T 或类型 List 的泛型类

转载 作者:行者123 更新时间:2023-12-01 09:09:59 25 4
gpt4 key购买 nike

我的 Java 泛型在离开很长一段时间后回到 Java 已经生锈了。

我正在尝试创建一个通用基类来包装 Jackson ObjectMapper

abstract class MyBaseClass<T> {
private Class<T> clazz;
public void read() {
objectMapper.readValue(json, clazz)
}

abstract Class<T> getGenericTypeClass();
}

我遇到的问题是有时 T 是类的实例,有时它需要是 List<T> 。我的代码适用于前者,但当我有列表场景时我无法编译它。所以这个

class Sub extends MyBaseClass<Thing> {
@Override
getGenericTypeClass() {
return Thing.class;
}
}

工作正常,但是当我需要List<Thing>时我有点失落。

最佳答案

你不能。而你不应该。一个Thing和一个 List<Thing>完全不同。它们类似于汽车 parking 场

我建议始终返回 List<Thing> ,包装单个Thing如果需要,在单例列表中。

这是一种(简单)方法;

public void read() {
objectMapper.readValue("[" + json.replaceAll("^\\[|]$", "") + "]", clazz);
}

哪里clazzTypeReference对于 List<Thing> .

字符串操作保证 JSON 将被包装在 "[...]" 中,如果没有方括号,则添加方括号。

关于java - 如何定义可以具有类型 T 或类型 List<T> 的泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40977685/

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