簡體   English   中英

Java類型安全轉換問題

[英]Java type safety casting issue

我有兩節課,如下所示:

// Jackson annotated-class
public class User {

}

和:

// Jackson annotated-class
public class ResponseWrapper<ResultType> {
    ...
}

在特定操作期間,我需要執行強制轉換。

  • 情況1:

     ResponseWrapper<User> r = (ResponseWrapper<User>) result.getResult(); 

    警告: Type safety: Unchecked cast from Object to ResponseWrapper<User>

  • 情況2

     Object o = result.getResult(); if ( o instanceof ReaponseWrapper<?> ) { ResponseWrapper<?> r = (ResponseWrapper<?>) result.getResult(); // OK } 

    沒有警告

  • 情況3

     Object o = result.getResult(); if ( o instanceof ResponseWrapper ) { ResponseWrapper<User> r = (ResponseWrapper<User>) result.getResult(); } 

    警告 (再次): Type safety: Unchecked cast from Object to ResponseWrapper<User>

如何執行從ObjectResponseWrapper<User>的類型安全轉換?

你不能 泛型是編譯時的幫助。 在運行時,Java使用類型擦除。 因此,Java無法在運行時檢查包裝器是ResponseWrapper<Foo>還是ResponseWrapper<Bar> 它可以檢查的只是它是否是ResponseWrapper 這就是為什么您會收到這樣的警告。

使用泛型聲明getResult ,如下所示:

public <T extends ResponseWrapper> T getResult() {
     ...
}

如果getResult方法來自無法更改的庫,則將無法修復警告。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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