假设我有两个从第三个抽象类派生的类:
public abstract class Parent{
public Parent(){
}
}
public class ChildA extends Parent {
public ChildA {
}
}
public class ChildB extends Parent {
public ChildB {
}
}在C#中,我可以通过执行以下操作,以某种类型安全的方式处理类型转换:
ChildA child = obj as ChildA;如果它不是ChildA类型的对象,这将使子==为空。如果我这样做:
ChildA child = (ChildA)obj;...in C#如果类型不正确,这将抛出异常。
那么基本上,有没有一种方法可以在Java中进行第一种类型的类型转换?谢谢。
发布于 2011-12-28 06:35:48
我想不出这种语言本身的方法,但你可以很容易地模仿它,如下所示:
ChildA child = (obj instanceof ChildA ? (ChildA)obj : null);发布于 2016-02-12 15:44:43
在java 8中,你也可以使用stream语法和可选的:
Object o = new Integer(1);
Optional.ofNullable(o)
.filter(Number.class::isInstance)
.map(Number.class::cast)
.ifPresent(n -> System.out.print("o is a number"));发布于 2017-06-21 23:40:39
您可以使用此方法,它与所有java类型都兼容:
public static <T> T safeCast(Object o, Class<T> clazz) {
return clazz != null && clazz.isInstance(o) ? clazz.cast(o) : null;
}示例:
// A given object obj
Integer i = safeCast(obj, Integer.class);https://stackoverflow.com/questions/8649975
复制相似问题