尝试使用-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
答案 0 :(得分:7)
原始类型是可以具有类型参数但尚未开启的类型。例如,Map
(和HashMap
)可以分别为键和值的类型设置类型参数K
和V
。
因此,您可以指定Map<Integer,String>
来指示地图包含Integer
个对象作为键,并将它们映射到String
个对象。
如果仅使用Map
,则不提供该信息。原始类型主要用于向后兼容,并且没有理由在新代码中使用它们。
解决方案:为Map
提供相应的类型。根据您的代码,V
将是UniformDistribution
,K
将是yKey
和xKey
的类型。
答案 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编译器的情况有所不同。