2011-02-25 67 views
5

尝试使用-Xlint开关后,我收到2条警告。我如何解决这些警告?从javac -Xlint得到警告:未选中

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 

回答

7

原始类型是一种类型,可以有一个类型参数,但还没有到。例如Map(和HashMap)可以分别具有用于键和值的类型的类型参数KV

所以,你可以指定一个Map<Integer,String>来指示地图包含Integer对象作为密钥,并将它们映射到String对象。

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

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

1

使用argMap的仿制药。我想QuadrantSystemRDB是从你的代码。如果不是,你几乎不能做任何事情:)

4

你应该使用仿制药! 说你的x键类型为字符串,然后宣布argMap为:

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

也许,那是因为你需要声明一个List对象,说(EG),不省略“<”和“>”:

List<Integer> list = new ArrayList(); 

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