Java未经检查的转换

时间:2011-03-15 20:12:39

标签: java generics warnings

我有以下代码行

this.htmlSpecialChars = this.getSpecialCharMap();

,其中

private HashMap<String,String> htmlSpecialChars;

但我收到有关未经检查的转化的警告。如何停止此警告?

5 个答案:

答案 0 :(得分:6)

你得到这个是因为getSpecialCharMap()正在返回一个对象,该对象的类型无法被编译器验证为HashMap&lt;字符串,字符串&gt;。继续为getSpecialCharMap提供原型。

答案 1 :(得分:2)

您收到警告,因为编译器无法验证对htmlSpecialChars的赋值是否为HashMap&lt; String,String&gt;,因为方法getSpecialChars()返回一个普通的非泛型HashMap。

您应修改方法以返回特定的泛型类型:

private HashMap<String,String> getSpecialCharMap() {
    return new HashMap<String,String>();
    }

答案 2 :(得分:0)

最好的方法是将方法的返回类型修改为numberMap的类型或这种方式 - 请注意这是非常糟糕的做法。不要告诉任何人我告诉你这个:

未经检查的转化警告示例:

private static HashMap getSpecialCharMap() {
    return new HashMap();
}

public static void main(String[] args) {        
    HashMap<String,String> numberMap = getSpecialCharMap(); //warning
}

没有警告的示例:

...
@SuppressWarnings("unchecked")
public static void main(String[] args) {
    @SuppressWarnings("unused")
    HashMap<String,String> numberMap = getSpecialCharMap();
}

答案 3 :(得分:-3)

getSpecialCharMap()非泛型HashMap的返回类型是什么?由于Type Erasure in Generics,通常会发生未经检查的转化警告。为了解决这个问题,您需要使用@SuppressWarnings("unchecked")来宣传该方法,或将getSpecialCharMap()的返回类型更改为HashMap<String, String>

答案 4 :(得分:-7)

先行:

@SuppressWarnings("unchecked")

这将关闭编译器警告。