我使用JSON.Simple从Java生成JSON输出。但是每次我调用jsonobj.put("this","that"),我都会在Eclipse中看到一个警告:
Type safety: The method put(Object, Object) belongs to the raw type HashMap. References to generic type HashMap should be parameterized
号
如果jsonObject是泛型的,那么最干净的修复程序就是这样,但是由于它不是,所以我不能添加任何泛型类型参数来修复这个问题。我想关闭尽可能少的警告,所以在许多方法中添加"@suppresswarnings"("unchecked")是不吸引人的,但是除了忍受警告之外,我还有其他选择吗?
这里有一个选择。它有点难看,但允许您将禁止的警告范围仅限于单个操作。
添加一个执行未选中强制转换的函数,并取消对其的警告:
@SuppressWarnings("unchecked")
private final static Map asMap(JSONObject j)
{
return j;
}
然后,您可以在不出现编译器警告的情况下调用它:
asMap(jsonobj).put("this","that");
这样,您就可以确保不会抑制任何实际希望看到的警告。
在NetBeans中,它为我返回另一组警告:>私有方法amap声明为final>私有方法amap声明为static
为库编写一些助手方法或包装类。只将EDOCX1[0]添加到这些助手中。然后使用助手执行与库的交互。
这看起来是目前最好的解决方案,谢谢。Eclipse警告我这件事是错误的,不是吗?这些错误应该在JSONObject代码中,而不是我的代码中。
保罗:Eclipse是正确的,因为这是Java所指定的方式。您会收到警告,因为您使用的是来自hashmap的原始方法(因为jsonObject扩展了hashmap,所以您必须这样做)。
您可以设置每个项目的编译器,并且可以将这些警告更改为忽略。
这比将@suppresswarnings("unchecked")添加到相关方法中还要极端;我的问题是,在抑制此方法的同时,我希望看到尽可能多的警告。
可以在旧项目配置中取消此特定警告。没有什么极端的。
这是极端的,因为他的项目不是遗产,只是他引用的图书馆。你的建议是让他的整个项目禁止警告。
我认为对于不编译的代码,您不会收到这样的警告。但是,如果您需要将代码编译为项目的一部分,那么您确实需要使用更具体的方法。但是,我建议您从该库中创建一个jar,而不是作为项目的一部分进行编译。
OMRY:我不会将JSONObject的代码编译为我的代码的一部分,我会通过Maven将其包含进来。警告在我的代码中,这不是遗留代码。基普的评论是正确的。接受的解决方案可以准确地解决我的问题-在将其与您的解决方案进行比较之前,请确保您了解它是如何做到这一点的。