java中的方法参考

我正在探索java中的方法引用,并且好奇是否可以将以下内容转换为方法引用

List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); list.forEach(item -> new SomeClass(item).someMethod(item)); 

我尝试了以下,但这不起作用

 list.forEach(SomeClass::new::someMethod); 

有四种类型的方法引用,您可以根据java规范使用,您只能使用此类型方法引用

  1. 引用静态方法Class :: staticMethodName
  2. 引用构造函数ClassName :: new
  3. 引用特定类型lass :: instanceMethodName的任意对象的实例方法

  4. 引用特定对象对象的实例方法:: instanceMethodName

无法以您提供的方式解决问题。 但是可以通过将someMethod方法定义为static来完成:

 list.forEach(item -> SomeClass.someMethod(item)); list.forEach(SomeClass::someMethod); 

SomeClass::new::someMethod语句不正确。 严格来说, SomeClass::new是指一段构造函数代码(如Consumer ),它不会返回一个新实例,而您需要一个对象来创建一个方法引用SomeClassinstance::someMethod

编辑:
我真的没有看到这种方法的任何优点:

 map(SomeClass::new).forEach(SomeClass::someMet‌hod) 

因为它导致创建一些无用的SomeClass实例,其中的item也不会被使用。

这可能是一个选择吗?

 Function f = SomeClass::new; List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); list.forEach(i -> f.apply(i).someMethod()); 

显然,做一个你想要的方法是另一种方法:

 private static void method(int item) { new SomeClass(item).someMethod(); } list.forEach(YourClass::method); 

我想到了以下代码。 虽然,它不是使用方法参考,但应该比命令式样式编码更具可读性。

 List list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); Function someClass = SomeClass::new; BiConsumer someMethod = SomeClass::someMethod; list.forEach(item -> someMethod.accept(someClass.apply(item), item));