我试图在我的代码中使用Java 8方法引用.有四种类型的方法参考可用.
随着Static method reference和Constructor reference我有没有问题,但Instance Method (Bound receiver)和Instance Method (UnBound receiver)真搞糊涂了.在Bound接收器中,我们使用Object引用变量来调用方法,如:
objectRef::Instance Method
Run Code Online (Sandbox Code Playgroud)
在UnBound接收器中,我们使用类名来调用方法,如:
ClassName::Instance Method.
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
Bound和Unbound接收方法引用有什么区别?Bound在哪里使用Unbound接收器?我们应该在哪里使我还从Java 8语言特性书中找到了解释Bound和Unbound接收器,但仍然与实际概念混淆.
这是一个简单的类,说明了我的问题:
package com.example;
import java.util.function.*;
public class App {
public static void main(String[] args) {
App a1 = new App();
BiFunction<App, Long, Long> f1 = App::m1;
BiFunction<App, Long, Void> f2 = App::m2;
f1.apply(a1, 6L);
f2.apply(a1, 6L);
}
private long m1(long x) {
return x;
}
private void m2(long x) {
}
}
Run Code Online (Sandbox Code Playgroud)
f1,指的是App::m1,和被绑定到a1中f1的来电apply,工作完全正常-编译器是幸福的呼叫可以通过f1.apply就好制成.
f2,指App::m2,不起作用.
我希望能够定义一个没有返回类型的未绑定非静态方法的方法引用,但我似乎无法使其工作.
我希望能够在从scons安装一些python脚本时替换模板变量('$(SOFTWARE_VERSION)').scons已经有这样的功能吗?如果没有,那么挂钩scons安装过程的最佳方式是什么,所以我可以在安装过程中执行此操作?
我正在寻找Linux中的线程池抽象,它提供与Win32线程池提供的相同级别的内核调度程序支持.具体来说,我有兴趣找到一个维护一定数量的运行线程的线程池.当正在运行的池线程阻塞I/O时,我希望线程池足够智能以启动另一个运行的线程.
任何人都知道这样的Linux吗?
我有一个 Javajava.util.Set类型Comparable,我想将其按升序序列化为 JSON 数组。
有一个对象映射器功能可以序列化按映射键排序的映射,但没有提及 java 集。如果我将项目存储在java.util.SetPOJO 中,Jackson 是否会ObjectMapper以任何顺序将它们序列化为 JSON 数组?
如果没有,我正在考虑为此目的为此集编写一个自定义序列化器 - 有人可以建议更好的方法吗?
最终,目标是将唯一整数数组反序列化到“请求”pojo 中的某种容器中。然后处理请求并将该输入字段传递到“响应”对象中相应的输出字段(不变)。
我想将数据存储在 POJO 中,只是java.util.Set<Integer>为了让所有用户满意(如果您尝试将其存储为 POJO 接口的子类型,Set那么 POJO 界面的消费者可能会感到不安,因为他们不仅不能获取,Set而且还必须期望 aHashSet或 a TreeSet)。
这行得通吗?
[5,4,3,2,1]被反序列化为BUT,我在 setter 方法上Set<Integer>使用。@JsonDeserialize(as=TreeSet.class)所以对象的运行时类型现在是 a TreeSet(即使它作为 a 存储在 POJO 中Set)。Set并最终存储在响应 POJO 中(运行时类型仍然是TreeSet,即使 POJO 字段类型是 Set )。ObjectMapper将一个TreeSetJSON 数组序列化[1,2,3,4,5] …我很想用这个:
@Getter
@ToString
@RequiredArgsConstructor(onConstructor_ = {@JsonCreator(mode = JsonCreator.Mode.PROPERTIES)})
private static class RestErrorObject {
private final String error; // optional
private final String message; // optional
private final String path; // optional
private final String status; // optional
private final String timestamp; // optional
}
Run Code Online (Sandbox Code Playgroud)
但相反,我必须使用这个:
@Getter
@ToString
private static class RestErrorObject {
private final String error; // optional
private final String message; // optional
private final String path; // optional
private final String status; // optional
private final String timestamp; …Run Code Online (Sandbox Code Playgroud)