这两个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
确定的其他常用类是什么?
答案 0 :(得分:4)
Java标准库中没有其他常用使用的Entry
类。在大多数应用程序中,选择导入Map.Entry
以便直接使用Entry
就足够了。
因此,除了唯一识别一个类的问题外,它纯粹是装饰性的和某种个人偏好。
我个人更频繁地看到Entry
的使用情况,但我也看到了另一种变体。同样,这只是个人偏好,没有理由你需要来做这件事。
另请注意,许多人使用IDE,他们通常会自动执行导入过程。因此,程序员特定使用这个或那个版本的原因也可能是他的IDE只是决定了该版本。例如,我的 Eclipse 倾向于使用最接近的import语句,因此它将选择导入Map.Entry
,因此我只在代码中使用Entry
。
仅供记录,以下是我的标准Java 包含的Entry
类列表:
答案 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
,也可以在编写类型时使用条形码前缀。