map-IntelliJ警告的Java方法参考

map-IntelliJ警告的Java方法参考,java,java-8,method-reference,Java,Java 8,Method Reference,Intellij警告此表达式: usersAttributes.get(user.getName()).forEach((attrName, val) -> user.addAttribute(attrName, val)); 可替换为方法引用。我该怎么做呢?IntelliJ是对的。你可以重写: usersAttributes.get(user.getName()).forEach(user::addAttribute); 这种情况称为: 以下是对特定对象的实例方法的引用示例: cla

Intellij警告此表达式:

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

可替换为方法引用。我该怎么做呢?

IntelliJ是对的。你可以重写:

usersAttributes.get(user.getName()).forEach(user::addAttribute);
这种情况称为:

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

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
调用作为对象
myComparisonProvider
一部分的方法
compareByName
。JRE推断方法类型参数,在本例中为
(Person,Person)

在您的例子中,
user::addAttribute
引用名为
addAttribute
的方法,该方法使用两个参数,其中第一个参数与
attrName
类型兼容,第二个参数也与
val
类型兼容。此方法将在
用户
实例上调用