假设我有两个派生自第三个抽象类的类:
public abstract class Parent{
public Parent(){
}
}
public class ChildA extends Parent {
public ChildA {
}
}
public class ChildB extends Parent {
public ChildB {
}
}
Run Code Online (Sandbox Code Playgroud)
在C#中,我可以通过以下方式处理某种类型安全的方式:
ChildA child = obj as ChildA;
Run Code Online (Sandbox Code Playgroud)
如果它不是ChildA类型对象,那么会使child == null.如果我这样做:
ChildA child = (ChildA)obj;
Run Code Online (Sandbox Code Playgroud)
...在C#中,如果类型不正确,则会抛出异常.
所以基本上,有没有办法在Java中进行第一种类型的转换?谢谢.
Ale*_*s G 58
我无法想到语言本身的一种方式,但你可以像这样轻松地模仿它:
ChildA child = (obj instanceof ChildA ? (ChildA)obj : null);
Run Code Online (Sandbox Code Playgroud)
Dmi*_*kov 13
在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"));
Run Code Online (Sandbox Code Playgroud)
Fab*_*_75 12
您可以使用与所有java类型兼容的此方法:
public static <T> T safeCast(Object o, Class<T> clazz) {
return clazz != null && clazz.isInstance(o) ? clazz.cast(o) : null;
}
Run Code Online (Sandbox Code Playgroud)
示例:
// A given object obj
Integer i = safeCast(obj, Integer.class);
Run Code Online (Sandbox Code Playgroud)
您可以使用该instanceof运算符.
if(obj instanceof ChildA){
final ChildA child = (ChildA) obj;
}
Run Code Online (Sandbox Code Playgroud)
在现代 Java 中你会使用
if (obj instanceof ChildA childa) {
}
Run Code Online (Sandbox Code Playgroud)
这与现代 C# 几乎相同
if (animal is Dog dog)
{
// Use dog here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27867 次 |
| 最近记录: |