Java中是否有一种“类型安全”的转换形式?

2022-09-01 00:43:57

假设我有两个类从第三个抽象类派生:

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 类型对象,这将使该对象为 null。如果我要做:

ChildA child = (ChildA)obj;

...在 C# 中,如果类型不正确,这将引发异常。

那么基本上,有没有办法在Java中进行第一种类型的转换?谢谢。


答案 1

我想不出语言本身的方法,但你可以很容易地像这样模仿它:

ChildA child = (obj instanceof ChildA ? (ChildA)obj : null);

答案 2

在java 8中,您还可以将流语法与可选一起使用:

    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"));

推荐