所以我们知道,Java 没有具体化的泛型。这意味着如果你这样做:
Object someObject;
Transporter<Person> transporter = (Transporter<Person>) someObject;
这会产生未经检查的警告,因为您现在面临集合中的某些对象实际上不是 type 的风险,如果来自公共 API 中的外部对象Person
,这可能会令人讨厌。someObject
但更常见的是,至少根据我自己的经验,您绝对确定该集合仅包含给定的类型。
所以你最终会这样做:
Object someObject;
@SuppressWarnings("unchecked")
Transporter<Person> transporter = (Transporter<Person>) someObject;
当然,可以为您创建一个方便的功能。这是它的工作原理:
@SuppressWarnings("unchecked")
public static <T> T unsafeCast(Object object) {
return (T) object;
}
然后你可以这样做:
Object someObject;
Transporter<Person> transporter = unsafeCast(someObject);
这显然更好看,但它是如此明显的修复,我认为每个人最终都会想出它。如果我查看像 Gradle 这样的源代码,我会找到一个内部便利的方法。我相信其他人都会有同样的情况。
我们已经在使用 Guava,它似乎没有任何类似的东西。
问题是,是否有一个库可以解决这类问题,或者每个人最终都会在他们的代码库中实现相同的方法?