2010-04-15 88 views
7

我使用JSON.simple从Java生成JSON输出。但每次我打电话给jsonobj.put(“this”,“that”)时,我在Eclipse中看到一条警告:如何在不使用泛型的情况下使用遗留代码时避免使用Eclipse警告?

类型安全:方法put(Object,Object)属于原始类型HashMap。引用泛型类型HashMap的应该是参数

清洁修复是,如果把JSONObject是泛型化,但因为它是不,我不能添加任何泛型类型参数来解决这个问题。我想关闭尽可能少的警告,因此在许多方法中添加“@SuppressWarnings(”unchecked“)”是没有吸引力的,但除了提出警告外,还有其他选择吗?

回答

7

这里有一个选项。这有点难看,但允许您将受到抑制的警告限定在单个操作中。

上添加一个函数,它确实未选中的演员阵容,并抑制警告:

@SuppressWarnings("unchecked") 
private final static Map<Object,Object> asMap(JSONObject j) 
{ 
    return j; 
} 

然后,你可以把它叫做没有编译器警告:

asMap(jsonobj).put("this", "that"); 

这样,你可以肯定的是你并没有压制任何你真正想看到的警告。

+0

在Netbeans中,对我返回另一组警告: >私有方法aMap声明为最终 >私有方法aMap声明为static – user919860 2013-04-04 15:26:28

4

您可以拥有每个项目的编译器设置,您可以将这些警告更改为忽略

+3

这比向相关方法添加@SuppressWarnings(“unchecked”)更加极端。我的问题是,我希望尽可能多地看到警告,同时压制这个警告。 – 2010-04-15 15:39:14

+0

您可以在旧项目配置中禁止此特定警告。没有什么极端的。 – 2010-04-15 16:51:44

+0

这是极端的,因为*他的*项目不是遗产,只是他所参考的图书馆。你的建议是为了他的整个项目压制警告。 – Kip 2010-04-15 21:39:33

4

编写一些辅助方法或库的包装类。仅向这些助手添加@SuppressWarnings("unchecked")。然后使用助手来执行与库的交互。

+0

这看起来是迄今为止最好的解决方案,谢谢。 Eclipse在这方面警告我是错误的,不是吗?这些错误应该在JSONObject代码中,而不是我的代码中。 – 2010-04-15 15:41:49

+0

@Paul:Eclipse是正确的,因为这是它为Java指定的方式。您会收到警告,因为您使用的是HashMap中的原始方法(由于JSONObject扩展了HashMap,您必须这样做)。 – 2010-04-15 15:50:35

相关问题