eri*_*son 53
public static <T> T as(Class<T> t, Object o) {
return t.isInstance(o) ? t.cast(o) : null;
}
Run Code Online (Sandbox Code Playgroud)
用法:
MyType a = as(MyType.class, new MyType());
// 'a' is not null
MyType b = as(MyType.class, "");
// b is null
Run Code Online (Sandbox Code Playgroud)
Eug*_*kov 29
您可以使用该instanceof关键字来确定是否可以正确投射.
return obj instanceof String?(String)obj: null;
Run Code Online (Sandbox Code Playgroud)
当然它可以被泛化并成为函数,但我认为问题是Java必须实现的目的.
您可以,但不能使用Java中的单个函数:
public B nullCast(Object a) {
if (a instanceof B) {
return (B) a;
} else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,如果不添加目标类,则无法使B类成为泛型(对于此示例)(这与泛型类型不可用的事实有关instanceof):
public <V, T extends V> T cast(V obj, Class<T> cls) {
if (cls.isInstance(obj)) {
return cls.cast(obj);
} else {
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10463 次 |
| 最近记录: |