java - 静态方法中的嵌套泛型类型
问题描述
我一直在寻找解决这个问题的方法,我需要构建方法以使其返回someObject<anotherObject>
,我正在考虑构建这样的东西:
public static <T, K> T<K> jsonToObjectType(String json, TypeReference<T<K>> type) {
// More code
}
但它不编译,有没有办法执行该方法?谢谢!
解决方案
public static <T, K> T<K>
YourT
没有界限,意思是,T 可以是任何东西。可能是String
。
String 没有泛型,那怎么可能T<K>
有意义呢?它没有,因此,java 不允许你编译它。
我想你可以设想这样的概念:“T 是某种特定类型,可以是任何东西,只要它有 1 个泛型参数”,但 java 没有这个,也永远不会,因为那是结构类型和java不这样做。
但是,请注意泛型参数可以是任何类型,特别是包括本身参数化的类型。这是一个简单的例子:
public static <T> T coalesce(T a, T b) {
return a == null ? b : a;
}
这种方法可以像这样使用:
String a = null;
String b = "Hello";
coalesce(a, b).toLowerCase();
喂它 2 绝对没有问题List<String>
,此时表达式coalesce(listA, listB)
将是 type List<String>
。这只是与<T>
,而不是与这些<T, K>
东西。
我不太清楚jsonToObjectType
应该做什么,但假设它应该采用包含 JSON + 一些超级类型令牌的字符串(您可以在网上搜索该术语),我 99.9% 肯定你有,然后只需从其中删除 K ,你就会得到你想要的:
public static <T> T jsonToObjectType(String json, TypeReference<T> type) {
// code here
}
你可以这样称呼它:
String json = "[\"Hello\", \"World!\"]";
List<String> list = jsonToObjectType(json, new TypeReference<List<String>>() {});
它会在没有警告或错误的情况下编译并且可以正常工作。
推荐阅读
- excel - 写入工作表时的自定义格式日期
- git - Jenkins + Git/Gerrit + 增量 Klocwork 扫描
- c++ - Qt QML 桌面应用程序自动化测试
- javascript - 如何使用js添加和删除活动类
- php - Sum of 4 fields in table with laravel
- vb.net - 使用调用变量 vb.net 生成可打印的字母
- python - 为什么“If”条件内的字符串返回True
- bash - 在 bash 终端中循环并应用命令
- c# - NamedPipe WriteFile 被阻止(C++ 服务器 C# 客户端)
- kotlin - 如何使用 bit 在 Kotlin 中存储配置?