Java为什么图一foreach循环那里取值不用get?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java为什么图一foreach循环那里取值不用get?相关的知识,希望对你有一定的参考价值。

参考技术A 通常情况下,属性都是声明成私有的,然后提供get,set方法供别人调用。
你这for循环可以直接访问属性,说明这些属性是public修饰的。
对于public属性,用不用get都行,没什么差别追问

哦哦 但是为啥除了那个for那里其他删掉get就会报错勒?

这个函数也是public

追答

函数是public就是别的类可以调用到这个函数,有什么疑问吗

追问

就是您不是说因为public所以不用get也可以 但是刚刚for那里可以去掉 为啥这里去掉就要报错勒?

追答

直接访问属性不用加括号,加括号是方法,你没有id()这样的方法

追问

!!
那如果我是用的private 和get就要加括号吗?

好像get方法就是get()要加 如果不是用get像您说的直接访问属性就不加了 懂了 感谢!

本回答被提问者采纳

字典中的Java foreach循环

【中文标题】字典中的Java foreach循环【英文标题】:Foreach loop in java for Dictionary 【发布时间】:2012-03-11 09:58:30 【问题描述】:

我想浏览java字典中的每个项目。为了澄清我想要做什么,这是 C# 代码

Dictionary<string, Label> LableList = new Dictionary<string, Label>();
foreach (KeyValuePair<string, Label> z in LabelList);

不知道这个是java怎么做的,比如我是这样做的

for(Object z: dic)

但它说它是不可迭代的。请指教……

【问题讨论】:

【参考方案1】:

我假设您有一个Map&lt;String, Label&gt;,它是 Java 内置的字典结构。 Java 不允许您直接迭代 Map(即它没有实现 Iterable),因为您实际迭代的内容会模棱两可。

这只是选择遍历键、值或条目(两者)的问题。

例如

Map<String, Label> map = new HashMap<String, Label>();
//...

for ( String key : map.keySet() ) 


for ( Label value : map.values() ) 


for ( Map.Entry<String, Label> entry : map.entrySet() ) 
    String key = entry.getKey();
    Label value = entry.getValue();

您的 C# 代码似乎与遍历条目相同(最后一个示例)。

【讨论】:

我是这样定义的: Dictionary dic = null;我对地图一无所知……它是某种字典吗? @Daniel 阅读 javadoc 会告诉您NOTE: This class is obsolete. New implementations should implement the Map interface, rather than extending this class.,因此您应该使用新的地图类之一。您可能想要一个 HashMap - 它还实现了迭代工作所需的新功能 太棒了,我早就忘记了 Hashtable 有一个 Dictionary 超类。 @Mark 是的,我也必须查一下,我的第一反应是“等待 Java 甚至没有字典,你到底在做什么?”。字典在 1.2 中被取代(只是为了说明它的古老程度:1.2 是 Sun 的 JVM 包含 JIT 的第一个版本)【参考方案2】:

java.util.Map 是 Dictionary 等价物,下面是一个关于如何遍历每个条目的示例

for(Map.Entry<K, V> e : map.entrySet())

    System.out.println(e.getKey()+": "+e.getValue());

【讨论】:

【参考方案3】:

最好的办法是使用这个:

for (String key : LableList.keys()) 
    Label value = LableList.get(key);

    // do what you wish with key and value here

然而,在 Java 中,最好不要像在 .NET 中那样使用 Dictionary,而是使用 Map 子类之一,例如哈希映射。您可以像这样遍历其中之一:

for (Entry<String, Label> e : myMap.entrySet()) 
    // Do what you wish with e.getKey() and e.getValue()

还建议您不要在官方 javadoc 中使用 Dictionary。

【讨论】:

Dictionary.keys() 返回一个未实现 Iterable 的枚举,因此不能在 foreach 循环中使用。您的代码将无法编译。 所以要么我的 Eclipse 编译器坏了(显示错误),要么我们谈论的不是同一件事。 (无论如何,字典并不重要) 你的 Java 版本是多少? Java 1.6.0_45,具有默认合规级别。也许您的意思是 .keySet() 而不是 .keys()? .keySet 仅在集合还实现 Map 时才实现(Dictionary 没有,但例如 Properties 有)。【参考方案4】:

我试图将一个 HashMap (a) 的内容添加到另一个 HashMap (b) 中。

我发现以这种方式遍历 HashMap a 很简单:

a.forEach((k, v) -> b.put(k, v));

你可以操纵我的例子在“->”的另一边做任何你想做的事情。

请注意,这是一个 Lambda 表达式,您必须使用 Java 1.8 (Java 8) 或更高版本才能使其工作。 :-)

【讨论】:

以上是关于Java为什么图一foreach循环那里取值不用get?的主要内容,如果未能解决你的问题,请参考以下文章

C#中foreach语句的作用?

foreach用法

foreach的用法

为啥我不能在“foreach”循环中取消设置变量?

java foreach循环为什么不能赋值

如何控制 foreach 循环次数 只循环15次