首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中有一种“类型安全”类型转换吗?

Java中有一种“类型安全”类型转换吗?
EN

Stack Overflow用户
提问于 2011-12-28 06:32:47
回答 6查看 40.6K关注 0票数 42

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

代码语言:javascript
运行
复制
public abstract class Parent{
    public Parent(){
    }
}

public class ChildA extends Parent {
    public ChildA {
    }
}

public class ChildB extends Parent {
    public ChildB {
    }
}

在C#中,我可以通过执行以下操作,以某种类型安全的方式处理类型转换:

代码语言:javascript
运行
复制
ChildA child = obj as ChildA;

如果它不是ChildA类型的对象,这将使子==为空。如果我这样做:

代码语言:javascript
运行
复制
ChildA child = (ChildA)obj;

...in C#如果类型不正确,这将抛出异常。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-12-28 06:35:48

我想不出这种语言本身的方法,但你可以很容易地模仿它,如下所示:

代码语言:javascript
运行
复制
ChildA child = (obj instanceof ChildA ? (ChildA)obj : null);
票数 72
EN

Stack Overflow用户

发布于 2016-02-12 15:44:43

在java 8中,你也可以使用stream语法和可选的:

代码语言:javascript
运行
复制
    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"));
票数 24
EN

Stack Overflow用户

发布于 2017-06-21 23:40:39

您可以使用此方法,它与所有java类型都兼容:

代码语言:javascript
运行
复制
public static <T> T safeCast(Object o, Class<T> clazz) {
    return clazz != null && clazz.isInstance(o) ? clazz.cast(o) : null;
}

示例:

代码语言:javascript
运行
复制
// A given object obj
Integer i = safeCast(obj, Integer.class);
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8649975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档