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);
}