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<String, Label>
,它是 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# 代码似乎与遍历条目相同(最后一个示例)。
【讨论】:
我是这样定义的: DictionaryNOTE: 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?的主要内容,如果未能解决你的问题,请参考以下文章