java中的方法引用
我正在探索java中的方法引用,只是好奇下面的内容是否可以转换为方法引用java中的方法引用,java,java-8,method-reference,Java,Java 8,Method Reference,我正在探索java中的方法引用,只是好奇下面的内容是否可以转换为方法引用 List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8); list.forEach(item -> new SomeClass(item).someMethod(item)); 有四种类型的方法引用,您可以根据java规范使用,您只能使用这种类型的方法引用 List<Integer> list = Arrays.asList(1,
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
list.forEach(item -> new SomeClass(item).someMethod(item));
有四种类型的方法引用,您可以根据java规范使用,您只能使用这种类型的方法引用
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
list.forEach(item -> new SomeClass(item).someMethod(item));
有四种类型的方法引用,您可以根据java规范使用,您只能使用这种类型的方法引用
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
list.forEach(item -> new SomeClass(item).someMethod(item));
没有办法以您提供的方式解决问题。但是可以通过将
someMethod
方法定义为static
:
list.forEach(item -> SomeClass.someMethod(item));
list.forEach(SomeClass::someMethod);
语句SomeClass::new::someMethod
不正确。
严格来说,SomeClass::new
指的是一段构造函数代码(如使用者
),当您需要一个对象来进行方法引用时,它不会返回新实例SomeClassinstance::someMethod
编辑:我真的不认为这种方法有什么好处:
map(SomeClass::new).forEach(SomeClass::someMethod)
因为它会导致创建一部分无用的
SomeClass
实例,其中包含项
s,这些项也不会被使用。无法以您提供的方式解决此问题。但是可以通过将someMethod
方法定义为static
:
list.forEach(item -> SomeClass.someMethod(item));
list.forEach(SomeClass::someMethod);
语句SomeClass::new::someMethod
不正确。
严格来说,SomeClass::new
指的是一段构造函数代码(如使用者
),当您需要一个对象来进行方法引用时,它不会返回新实例SomeClassinstance::someMethod
编辑:我真的不认为这种方法有什么好处:
map(SomeClass::new).forEach(SomeClass::someMethod)
因为它会导致创建一部分无用的
SomeClass
实例,其中包含项
s,这些项也不会被使用。这是一个选项吗
Function<Integer, SomeClass> f = SomeClass::new;
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
list.forEach(i -> f.apply(i).someMethod());
这是一种可能的选择吗
Function<Integer, SomeClass> f = SomeClass::new;
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
list.forEach(i -> f.apply(i).someMethod());
我想到了下面的代码。尽管如此,它并没有使用方法引用,但应该比命令式编码更具可读性
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
Function<Integer, SomeClass> someClass = SomeClass::new;
BiConsumer<SomeClass, Integer> someMethod = SomeClass::someMethod;
list.forEach(item -> someMethod.accept(someClass.apply(item), item));
List List=Arrays.asList(1,2,3,4,5,6,7,8);
函数someClass=someClass::new;
双消费者someMethod=SomeClass::someMethod;
list.forEach(item->someMethod.accept(someClass.apply(item),item));
我想到了以下代码。尽管如此,它并没有使用方法引用,但应该比命令式编码更具可读性
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
Function<Integer, SomeClass> someClass = SomeClass::new;
BiConsumer<SomeClass, Integer> someMethod = SomeClass::someMethod;
list.forEach(item -> someMethod.accept(someClass.apply(item), item));
List List=Arrays.asList(1,2,3,4,5,6,7,8);
函数someClass=someClass::new;
双消费者someMethod=SomeClass::someMethod;
list.forEach(item->someMethod.accept(someClass.apply(item),item));
否,::
与“管道”不兼容。@WillemVanOnsem是否可以使用使用列表创建的对象。forEach(SomeClass::new)
调用someMethod
?为什么要在someMethod
调用中再次包含项
?如果没有必要,您可以执行类似于list.stream().map(SomeClass::new).forEach(SomeClass::someMethod)
的操作。如果需要,您可以声明一个新方法来完成您想要的任务,然后使用引用它。您不能使用伸缩方法引用,不,:
不适用于“管道”@WillemVanOnsem是否可以使用使用list.forEach(SomeClass::new)
创建的对象调用someMethod
?为什么要在someMethod
调用中再次包含项
?如果没有必要,您可以执行类似于list.stream().map(SomeClass::new).forEach(SomeClass::someMethod)
的操作。如果您愿意,可以声明一个新方法来实现您想要的功能,然后使用引用。您不能使用伸缩方法引用,好吧,在这种情况下,正如ole-v-v建议的那样,我最好创建一个方法并从那里处理所有这些。好的,在这种情况下,正如ole-v-v所建议的,我最好创建一个方法并从那里处理所有这些。