那是什么样的功能?

What kind of feature is that?

我无法理解以下代码片段:

Unirest.setObjectMapper(new ObjectMapper() {
    private com.fasterxml.jackson.databind.ObjectMapper jacksonObjectMapper
            = new com.fasterxml.jackson.databind.ObjectMapper();

    public <T> T readValue(String value, Class<T> valueType) {
        try {
            return jacksonObjectMapper.readValue(value, valueType);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public String writeValue(Object value) {
        try {
            return jacksonObjectMapper.writeValueAsString(value);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
});

ObjectMapper是一个接口,怎么可以像is一样用new关键字来定义呢?看起来像 java 8 个特征,对吧?

这在 Java 中很常见,您看到的是匿名的 类。相同的代码可以替换为以下内容:

private class ObjectMapperChild extends ObjectMapper
{
private com.fasterxml.jackson.databind.ObjectMapper jacksonObjectMapper
            = new com.fasterxml.jackson.databind.ObjectMapper();

    public <T> T readValue(String value, Class<T> valueType) {
        try {
            return jacksonObjectMapper.readValue(value, valueType);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    public String writeValue(Object value) {
        try {
            return jacksonObjectMapper.writeValueAsString(value);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
    }
}

ObjectmapperChild objMapperChild = new ObjectMapperChild();
Unirest.setObjectMapper(objMapperChild);

这是一个匿名 class。例如,如果您不想创建带有声明的新 class 文件,因为您将仅在代码的那个地方使用此 class,那么您可以这样做。

在 Java 1.8 中引入了函数式接口(只有一种方法的接口),您可以使用 Lambda 表达式声明此类匿名 classes。例如,当您要过滤列表时:

(Person p) -> p.getGender() == Person.Sex.MALE

相同
 new CheckPerson() {
     public boolean test(Person p) {
         return p.getGender() == Person.Sex.MALE;
     }
 }

interface CheckPerson {
    boolean test(Person p);
}

您可以在此处找到有关 lambda 的更多信息 - https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html