Tan*_*nia 2 java generics casting
以下代码生成"未检查或不安全的操作"警告,如何在不引起警告的情况下转换Object o为类型T?我知道我可以压制警告,但我想知道"正确"的方式.
public class MyType<T> {
T cast(Object o) {
return (T)o; //<--- what causes the warning
}
}
Run Code Online (Sandbox Code Playgroud)
键入擦除.您可以将其Class<T>作为参数传递,并使用它.喜欢,
T cast(Class<T> cls, Object o) {
return cls.cast(o);
}
Run Code Online (Sandbox Code Playgroud)
或甚至
public class MyType {
public static <T> T cast(Class<T> cls, Object o) {
return cls.cast(o);
}
}
Run Code Online (Sandbox Code Playgroud)
你可以称之为
int t = MyType.cast(Integer.class, 10);
Run Code Online (Sandbox Code Playgroud)
或者,但在同一行,您可以传递Class构造函数
public class MyType<T> {
public MyType(Class<T> cls) {
this.cls = cls;
}
private Class<T> cls;
T cast(Object o) {
return cls.cast(o);
}
}
Run Code Online (Sandbox Code Playgroud)
然后像使用它一样
MyType<Integer> myType = new MyType<>(Integer.class);
int t = myType.cast(10);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
140 次 |
| 最近记录: |