2016-09-05 5 views
-3

나는 다음과 같은 코드를 이해하지 수 :어떤 종류의 기능입니까?

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는 인터페이스, 어떻게처럼 새로운 키워드로 정의 할 수 있습니다 제공? 자바 8 기능처럼 보이십니까?

+7

Java 1.1 기능입니다. 익명 클래스. –

+0

아, 정말 고마워. –

+0

ObjectMapper를 조금 훑어 보았습니다. 이 인터페이스는 클래스가 아닙니다. 그에 따라 내 대답이 변경되었습니다. 익명 클래스의 개념은 여전히 ​​유효합니다. – nitinsh99

답변

2

이것은 자바에서 매우 일반적인 관행이며보고있는 것을 익명의 클래스라고합니다. 동일한 코드는 다음과 같이 바꿀 수 있습니다.

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

익명 사용자입니다. 예를 들어, 코드의 한 위치에서만이 클래스를 사용하기 때문에 선언을 사용하여 새 클래스 파일을 만들지 않으려면 다음과 같이하면됩니다.

Java 1.8에서 기능적 인터페이스 (하나의 메소드 만있는 인터페이스)를 도입하면 람다 식을 사용하여 이러한 익명 클래스를 선언 할 수 있습니다. 예를 들어, 당신은 목록을 필터링 할 때

interface CheckPerson { 
    boolean test(Person p); 
} 

당신이있어 더에 대한 람다를 찾을 수있을 때

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

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

과 동일 - https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html합니다.