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

新手上路,请多包涵

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

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

 ChildA child = (ChildA)obj;

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

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

原文由 garrettendi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 580
2 个回答

我想不出语言本身的方法,但你可以像这样轻松地模拟它:

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

原文由 Aleks G 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 Dmitry Klochkov 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题