簡體   English   中英

運行時類轉換 java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM