簡體   English   中英

Java 泛型和 classcastexception

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

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