小编Joh*_*ote的帖子

Java 8:方法引用Bound Receiver和UnBound Receiver之间的区别

我试图在我的代码中使用Java 8方法引用.有四种类型的方法参考可用.

  1. 静态方法参考.
  2. 实例方法(绑定接收器).
  3. 实例方法(UnBound接收器).
  4. 构造函数引用.

随着Static method referenceConstructor 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)

我有以下问题:

  1. 实例方法的不同类型的方法引用需要什么?
  2. BoundUnbound接收方法引用有什么区别?
  3. 我们应该Bound在哪里使用Unbound接收器?我们应该在哪里使

我还从Java 8语言特性书中找到了解释BoundUnbound接收器,但仍然与实际概念混淆.

java lambda java-8 method-reference

10
推荐指数
2
解决办法
4034
查看次数

Java 8 - 如何声明对返回void的未绑定非静态方法的方法引用

这是一个简单的类,说明了我的问题:

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,和被绑定到a1f1的来电apply,工作完全正常-编译器是幸福的呼叫可以通过f1.apply就好制成.

f2,指App::m2,不起作用.

我希望能够定义一个没有返回类型的未绑定非静态方法的方法引用,但我似乎无法使其工作.

java void java-8 java-stream method-reference

10
推荐指数
1
解决办法
262
查看次数

如何让SCons替换已安装文本文件中的文本

我希望能够在从scons安装一些python脚本时替换模板变量('$(SOFTWARE_VERSION)').scons已经有这样的功能吗?如果没有,那么挂钩scons安装过程的最佳方式是什么,所以我可以在安装过程中执行此操作?

variables templates install replace scons

5
推荐指数
2
解决办法
1614
查看次数

寻找具有OS调度程序支持的Linux threadpool api

我正在寻找Linux中的线程池抽象,它提供与Win32线程池提供的相同级别的内核调度程序支持.具体来说,我有兴趣找到一个维护一定数量的运行线程的线程池.当正在运行的池线程阻塞I/O时,我希望线程池足够智能以启动另一个运行的线程.

任何人都知道这样的Linux吗?

linux multithreading pool scheduler

5
推荐指数
1
解决办法
660
查看次数

Jackson ObjectMapper:java.util.Set 可以按升序序列化为 JSON 数组吗?

我有一个 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)。

这行得通吗?

  1. JSON 数组[5,4,3,2,1]被反序列化为BUT,我在 setter 方法上Set<Integer>使用。@JsonDeserialize(as=TreeSet.class)所以对象的运行时类型现在是 a TreeSet(即使它作为 a 存储在 POJO 中Set)。
  2. 通过服务器传递Set并最终存储在响应 POJO 中(运行时类型仍然是TreeSet,即使 POJO 字段类型是 Set )。
  3. ObjectMapper将一个TreeSetJSON 数组序列化[1,2,3,4,5] …

java serialization json set jackson

5
推荐指数
1
解决办法
1万
查看次数

使用 Lombok RequiredArgsConstructor 作为 JsonCreator

我很想用这个:

    @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)

java jackson lombok

3
推荐指数
1
解决办法
1204
查看次数