从javac -Xlint收到警告:未选中

时间:2011-02-25 07:50:11

标签: java generics

尝试使用-Xlint开关后,我收到了2个警告。我该如何解决这些警告?

test:quadrantRDBTemplate mymac$ javac -Xlint:unchecked -cp mysql-connector-java-5.0.jar:iucbrf.jar *.java 
QuadrantSystemRDB.java:271: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.HashMap
    argMap.put(xKey, new UniformDistribution(-1, 1));
              ^
QuadrantSystemRDB.java:272: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.HashMap
    argMap.put(yKey, new UniformDistribution(-1, 1));
              ^
2 warnings

4 个答案:

答案 0 :(得分:7)

原始类型是可以具有类型参数但尚未开启的类型。例如,Map(和HashMap)可以分别为键和值的类型设置类型参数KV

因此,您可以指定Map<Integer,String>来指示地图包含Integer个对象作为键,并将它们映射到String个对象。

如果仅使用Map,则不提供该信息。原始类型主要用于向后兼容,并且没有理由在新代码中使用它们。

解决方案:为Map提供相应的类型。根据您的代码,V将是UniformDistributionK将是yKeyxKey的类型。

答案 1 :(得分:4)

你应该使用泛型!! 假设您的xKey类型是String,然后将argMap声明为:

Map<String, UniformDist> argMap = new HashMap<String, UniformDist>()

答案 2 :(得分:1)

argMap使用泛型。我想QuadrantSystemRDB来自您的代码。如果不是,你几乎无能为力:)

答案 3 :(得分:1)

可能是因为你需要声明一个List对象,比如说(例如),而不需要省略'&lt;'和'&gt;':

List<Integer> list = new ArrayList();

我试图在没有NetBeans的情况下在堆栈中声明对象,NetBeans编译我的代码时没有错误消息。也许,javac编译器的情况有所不同。