如何在使用forEach()

时间:2015-11-18 10:44:33

标签: java foreach lambda

我是Java新手,我想为Properties对象中的每个键值对调用一个成员函数,如下所示:

public void addOption(String key, String value)
{
    // ...
}

public void foo()
{
    Properties properties = new Properties();
    // reads the property list from the input byte stream
    ...

    properties.forEach( (key, value) -> this.addOption(key, value));  // compiler error
    properties.forEach( (key, value) -> System.out.println("Key: " + key + ": Value: " + value));   // OK
}

报告以下编译器错误:

The method addOption(String, String) in the type Configuration is not applicable for the arguments (Object, Object)

我做错了什么?

2 个答案:

答案 0 :(得分:2)

java.util.Properties延伸Hashtable<Object,Object>

因此,您必须将密钥和值转换为String才能调用您的方法(假设所有键和值实际上都是String s):

properties.forEach( (key, value) -> this.addOption((String) key, (String) value));

另一种方法是将方法的签名更改为:

public void addOption(Object key, Object value)

答案 1 :(得分:0)

您应该将keyvalue投射到String

   properties.forEach( (key, value) -> this.addOption((String)key, (String) value));

为什么不使用Map<String,String>来获取Generic

的优势