java 泛型警告_关于java:如何在使用没有泛型的遗留代码时避免Eclipse警告?

我使用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将其包含进来。警告在我的代码中,这不是遗留代码。基普的评论是正确的。接受的解决方案可以准确地解决我的问题-在将其与您的解决方案进行比较之前,请确保您了解它是如何做到这一点的。

你可能感兴趣的:(java,泛型警告)