[英]Runtime class casting java
如何将源对象转换为目标对象?
public static Object convertObject(Object source, Object target){
return (target.getClass())source; // IDE: 'not a statement'
}
我不完全确定您要做什么,但是要转换为运行时类型,您需要Class.cast方法:
public static Object convertObject(Object source, Object target){
return target.getClass().cast(source);
}
这可以满足您的要求,但实际上并没有多大意义。 如果类型实际上不匹配,它会在运行时抛出java.lang.ClassCastException
。 这项检查实际上几乎是唯一要做的事情。
如果你真的需要做一些转换,这应该通过泛型方法来完成:
public static <T> T convert(Object source, Class<T> targetClass) {
return targetClass.cast(source);
}
public static Object convertObject(Object source, Object target) {
return target.getClass().cast(source);
}
至少在调用此方法后,不需要显式转换。
static class A {
String foo() { return "A"; };
}
static class B extends A {
String foo() { return "B"; };
}
static class C extends B {
String foo() { return "C"; };
}
测试
A c = new C();
A b1 = new B();
B b = convert(c, B.class);
B b2 = convertObject(c, b1); // incompatible types: Object cannot be converted to B
// explicit casting needed (B) convertObject(c, b1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.