地图的Java方法参考 - IntelliJ警告

时间:2016-01-07 12:55:28

标签: java java-8 method-reference

Intellij警告这个表达式:

usersAttributes.get(user.getName()).forEach((attrName, val) -> user.addAttribute(attrName, val));

可以用方法参考替换。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

IntelliJ是对的。你可以改写:

usersAttributes.get(user.getName()).forEach(user::addAttribute);

这种method reference称为"Reference to an instance method of a particular object"

  

以下是对特定对象的实例方法的引用示例:

class ComparisonProvider {
     public int compareByName(Person a, Person b) {
         return a.getName().compareTo(b.getName());
     }

     public int compareByAge(Person a, Person b) {
         return a.getBirthday().compareTo(b.getBirthday());
     }
 }
 ComparisonProvider myComparisonProvider = new ComparisonProvider();
 Arrays.sort(rosterAsArray, myComparisonProvider::compareByName);
     

方法引用myComparisonProvider::compareByName调用作为对象compareByName一部分的方法myComparisonProvider。 JRE推断出方法类型参数,在本例中为(Person, Person)

在您的情况下,user::addAttribute引用名为addAttribute的方法,该方法采用两个参数,其中第一个与attrName的类型兼容,第二个也与{的类型兼容{1}}。将在val实例上调用此方法。