Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 那是什么特征?_Java_Anonymous Class - Fatal编程技术网

Java 那是什么特征?

Java 那是什么特征?,java,anonymous-class,Java,Anonymous Class,我无法理解以下代码片段: Unirest.setObjectMapper(new ObjectMapper() { private com.fasterxml.jackson.databind.ObjectMapper jacksonObjectMapper = new com.fasterxml.jackson.databind.ObjectMapper(); public <T> T readValue(String value, Cla

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

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是一个接口,我怎么能用新的关键字定义它呢?它看起来像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);

这是一个匿名类。例如,如果您不想创建带有声明的新类文件,因为您将只在代码的某个位置使用该类,那么您可以这样做

在Java 1.8中,由于引入了函数接口,因此只有一种方法可以使用Lambda表达式声明此类匿名类。例如,当您要筛选列表时:

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

 new CheckPerson() {
     public boolean test(Person p) {
         return p.getGender() == Person.Sex.MALE;
     }
 }
什么时候


您可以在这里找到关于lambdas的更多信息-。

这是Java 1.1的特性。匿名类。啊,好的,非常感谢。我查了一下ObjectMapper。它不是一个接口,而是一个类。我相应地改变了答案。匿名类的概念仍然存在。
interface CheckPerson {
    boolean test(Person p);
}