[英]Java generics and classcastexception
不知道這里出了什么問題,但有一段時間沒有使用泛型,所以它可能是我不記得的東西,但基本上這段代碼“應該”工作,就我而言,但它沒有:
public static class MyModel {}
protected static <T extends MyModel> FlowableTransformer<Response<T>, T> convert(Class<T> responseClass) {
return observable -> observable.map((Function<Response<T>, T>) response -> {
MyModel m = new MyModel();
return (T)m;
});
}
使用它時,我在運行時收到 Classcastexception。 基本思想是該方法可以返回“MyModel”或其任何子類(因此 T 擴展了 MyModel)。 然而它現在不能帶着 MyModel 本身返回了嗎?
顯然只是問題的要點,而不是實際的代碼。 任何幫助表示贊賞。
假設我們有這 3 個類:
public class A {}
public class B extends A {}
public class C extends B {}
以及以下功能:
public static <T extends A> T foo() {
A ret_val = new A();
return (T)ret_val;
}
以下代碼將正常工作,沒有任何異常:
A obj = foo();
因為,這里foo()
方法中的ret_val
被轉換為A
,這是ret_val
的實際類型。
但是下面的代碼會拋出異常:
B objB = foo(); // throws ClassCastException exception
C objC = foo(); // throws ClassCastException exception
因為,您在這里嘗試做的是將A
類型的對象轉換為B
(或C
),這是非法的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.