7

我在声纳上收到此警告:

避免使用像“HashMap”这样的实现类型;改用界面

这是什么意思?

我收到此警告的课程如下:

class A {
   private HashMap<String, String> map=new HashMap<String, String>();

   //getters and setters

}

拜托,我想要适当的解决方案来避免对声纳发出警告。

4

3 回答 3

20

您应该始终对接口进行编码。IE。在这种情况下,您应该像这样声明您的字段:

private Map<String, String> map= new HashMap<String, String>();

这样,任何使用该map变量的东西都会将其视为 typeMap而不是HashMap.

这使您可以在以后更换地图的底层实现,而无需更改任何代码。你不再被束缚HashMap

通读这个问题:“编程到接口”是什么意思?

另外我不确定你在做什么Set

于 2013-01-18T10:07:23.487 回答
5

我不使用声纳,但警告的基本意思是

始终编​​程到接口而不是实现类

private Map<String, String> map= new HashMap<String, String>();
        Interface                    Implementing class
于 2013-01-18T10:07:37.900 回答
4

通常,您应该始终针对接口而不是具体类型来实现。在此示例中,这意味着您应该这样编写代码:

private Map<String, String> map= new HashMap<String, String>();

最大的优势是您以后可以随时更改 Map 的具体实现,而不会破坏代码。

要了解有关它的更多详细信息,请查看以下问题:程序员说“针对接口而不是对象的代码”是什么意思?

于 2013-01-18T10:07:50.973 回答