簡體   English   中英

在泛型中將@SuppressWarnings(“unchecked”)添加到單行生成eclipse編譯器錯誤

[英]Add @SuppressWarnings(“unchecked”) in generics to single line generates eclipse compiler error

我偶然發現了一個我不理解的奇怪行為。

我必須將一個String轉換為泛型,它會產生一個警告。

Type safety : Unchecked cast from String to T
  • 如果我在方法聲明上面添加@SuppressWarnings("unchecked")它可以正常工作。

  • 如果我將它添加到賦值之上,它會在eclipse中產生編譯器錯誤。

這很好用。

@SuppressWarnings("unchecked")
public <T> T search(final String query){
 T returnValue = null;
 ...
 if(returnValue instanceof String){
  returnValue = (T) collection.getString(attrName);
 }

這不行。

public <T> T search(final String query){
 T returnValue = null;
 ...
 if(returnValue instanceof String){
  @SuppressWarnings("unchecked") // Compiler error: "returnValue cannot be resolved to a type"
  returnValue = (T) collection.getString(attrName);
 }

有什么想法導致兩種抑制警告方法之間的差異?

你不能對任意表達式進行注釋(但是?可能它們稍后會添加它)。

但是,您可以在局部變量聲明上添加注釋。

所以編譯器在這里嘗試做的是將returnValue解釋為一個類型(因為這是唯一可以遵循方法體內注釋的東西)並且失敗。

在這種情況下, returnValue注釋放在returnValue聲明中沒有幫助。 但是,您可以創建一個新的局部變量,在初始化程序中執行強制轉換並對其進行注釋。

@SuppressWarnings("unchecked")
T string = (T) collection.getString(attrName);
returnValue = string;

暫無
暫無

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

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