Intellij警告这个表达式:
usersAttributes.get(user.getName()).forEach((attrName, val) -> user.addAttribute(attrName, val));
可以用方法参考替换。我怎么能这样做?
答案 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
实例上调用此方法。