2014-07-21 3 views
0

<>으로 제네릭 형식을 사용할 수 있으며 ()과 함께 개체를 전달할 수 있습니다. 이 예제에서와 같이 {}을 사용하여 정보를 전달할 때 호출되는 것은 무엇입니까?{}로 매개 변수 정보 전달

new Filter<CLDevice>() { 
    public boolean accept(CLDevice device) { 
     CLDeviceCapabilities caps = CLCapabilities.getDeviceCapabilities(device); 
     return caps.CL_KHR_gl_sharing; 
    } 
} 

또한 단지 생성자이 작업을 수행 또는 방법은 데이터를 수집하는 {}의 사용을 만들 수 있습니까?

해당 코드와 관련된주의 사항이 있습니까?

+4

'<>'와'()'와'{}'는 완전히 관련이 없으며 "정보 전달"개념 또는 다른 것의 인스턴스가 아닙니다. – immibis

+0

예제는 [anonymous class] (http://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html)를 보여줍니다. 클래스 선언, 블록 코드 선언 (메소드, 루프 등), 그리고 배열 이니셜 라이저에서 여러 가지 시나리오에서 사용된다. – Seelenvirtuose

+0

개념의 이름을 원한다면, 예제에서 ANONYMOUS CLASS를 사용하고 있습니다. 여기에 그것들을 사용하는 것에 관한 [질문] (http://stackoverflow.com/questions/355167/how-are-anonymous-inner-classes-used-in-java)가 있습니다. 보통, {} 안에는 클래스와 관련된 몇 가지 메소드가 구현됩니다 (여기서는'Filter'). – DenisFLASH

답변

2

실제로 표시되는 내용은 메서드에 인수를 전달하는 것처럼 정보를 전달하는 것이 아니라 전달 동작입니다.

자바 7까지 람다가 존재하지 않았기 때문에 비헤이비어를 전달하려면 항상 클래스가 필요합니다 (Java 월드에서 모든 클래스가 필요함). 표시 할 구문은 익명 내부 클래스의 구문입니다. 이 구문은 새로운 클래스 파일을 만들 필요가 없거나 만들고 싶지만 몇 가지 동작 만 전달해야 할 때 바로 가기로 사용됩니다.

하나 이상의 메소드를 구현 (행위 전달)해야한다면 동일한 구문을 쉽게 사용할 수 있습니다 (Java 8 람다로는 할 수 없었던 것).

2

이 경우 Single Abstract Method (SAM) 인터페이스 또는 기능 인터페이스에 대해 익명 클래스를 통해 구현을 제공합니다.

2

자바 {} 범위를 정의하십시오. 클래스, 메소드, 블록 등 다양한 범위의 범위가 있습니다.

예제에서 anonymous class을 생성 중입니다. 당신이 여기에 코드가 익명의 방법을 정의하는 .. 방법 또는 익명 클래스/메소드/객체의 몸을 만들 {}와

0
So you can do generic types with <>. 

You can pass objects with(). 

What is it called when you pass information with {}, as in this example 

.