1

下一个代码

public class FilterState<T>{
   Map<String, Object> getProperties(){return null;} // null for shorteness
}

....
public test(FilterState filterState){
    Map<String, Object> map = filterState.getProperties();
}

产生警告

Unchecked assignment: 'java.util.Map' to 'java.util.Map<java.lang.String, java.lang.Object>

但是,如果我将过程定义替换为

public <T> test(IFilterState<T> filterState)

警告消失。我不知道类泛型与地图分配有什么关系。快速搜索通用文档并没有帮助。知道在哪里看,有人吗?:)

4

4 回答 4

5

如果您放弃泛型类型参数,则整个类将被视为使用原始类型,并且该类的所有泛型类型信息都将被忽略。这就是这里发生的事情。

于 2012-07-06T13:34:00.913 回答
1

我记得当您使用原始类型时,具体化会失败,因此它的编译器可以自由地抱怨通用的属性/方法。但我可能错了。

于 2012-07-06T13:44:08.347 回答
0

我不确定到底是什么问题,但您可能想看看规范的第 4.8 节“原始类型”。

仅允许使用原始类型作为对遗留代码兼容性的让步。强烈反对在将泛型引入 Java 编程语言之后编写的代码中使用原始类型。Java 编程语言的未来版本可能不允许使用原始类型。为了确保始终标记可能违反类型规则的行为,对原始类型成员的某些访问将导致编译时未经检查的警告。

于 2012-07-06T12:46:41.430 回答
-1

根据类泛型,定义的类型将是类行为的一部分,因此这里方法返回类型(映射)泛型具有字符串。我认为这就是我们收到此警告的原因!!!由于您在后面添加了部分,这意味着您被迫使用,因此警告不存在......

您可以使用 Annotation @suppresswarning 抑制警告

于 2012-07-06T13:26:40.747 回答