作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下代码:
class ParametrizedObject<T> {...}
...
if (unknownObject instanceof ParametrizedObject) {
ParametrizedObject casted = (ParametrizedObject) unknownObject;
}
此代码触发原始类型警告。有没有办法/最佳实践来避免它?
注意:ParametrizedObject
类是框架的一部分,我无法更改它。
最佳答案
这实际上取决于您对转换对象的处理方式,但如果您不关心类型参数,则可以使用通配符来删除警告:
if (unknownObject instanceof ParametrizedObject) {
var casted = (ParametrizedObject<?>) unknownObject;
...
}
如果你正在做一些事情,比如设置一些依赖于类型参数的内部状态,那么由于type erasure,就不可能安全地进行转换。 , 其中所有类型参数都替换为 Object
:
class ParametrizedObject<T> {
T data;
void setData(T data) {
this.data = data;
}
}
MyClass someObject = ...;
ParametrizedObject<?> casted = (ParametrizedObject<?>) unknownObject;
casted.setData(someObject); // won't compile
MyClass someObject = ...;
ParametrizedObject<MyClass> casted = (ParametrizedObject<MyClass>) unknownObject;
casted.setData(someObject); // compiles but above cast generates a warning
关于转换泛型的 Java 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66873775/
我是一名优秀的程序员,十分优秀!