java.util.Map.Entry与Entry

时间:2017-08-03 01:28:10

标签: java

这两个for语句是等效的。

import java.util.Map;
import java.util.Map.Entry;

for (Map.Entry<String, Double> entry: map.entrySet())
    ;

for (Entry<String, Double> entry: map.entrySet())
    ;

程序员通常会编写Map.Entry而不是Entry,但它们可以是等效的。此外,界面被描述为Map.Entry at this link,而不仅仅是Entry

封闭式Map界面甚至在其page的文档中引用了Map.Entry

当然,冗长的方式避免了歧义,但人们试图避免哪些具体的歧义?换句话说,为了证明这种做法的合理性,可以指出Entry确定的其他常用类是什么?

2 个答案:

答案 0 :(得分:4)

Java标准库中没有其他常用使用的Entry类。在大多数应用程序中,选择导入Map.Entry以便直接使用Entry就足够了。

因此,除了唯一识别一个类的问题外,它纯粹是装饰性的和某种个人偏好

我个人更频繁地看到Entry的使用情况,但我也看到了另一种变体。同样,这只是个人偏好,没有理由你需要来做这件事。

另请注意,许多人使用IDE,他们通常会自动执行导入过程。因此,程序员特定使用这个或那个版本的原因也可能是他的IDE只是决定了该版本。例如,我的 Eclipse 倾向于使用最接近的import语句,因此它将选择导入Map.Entry,因此我只在代码中使用Entry

仅供记录,以下是我的标准Java 包含的Entry类列表:

Entry classes in the standard Java

答案 1 :(得分:0)

唯一的区别是化妆品。两者都引用同一个类,可以在包java.util.Map下找到Entry类。不同之处仅在于您希望如何编写它。

你可以做到

for (java.util.Map.Entry<String, Double> entry: map.entrySet())

没有导入,如果你想要,但如果你的班级有很多条目需要处理,那么你将会写很多次,而且可读性较差。

编辑:

请注意,如果您使用程序包foo中的许多类,并且选择在Test下使用类foo.bar,则IDE有时可能会直接将其导入为bar.Test并保留导入foo.*。您可以随时选择手动导入foo.bar并直接将其用作Test,也可以在编写类型时使用条形码前缀。