확장 방법을 사용하여 C #에서와 같이 객체 목록에 기능을 구현하려고합니다.
이 같은:
List<DataObject> list;
// ... List initialization.
list.getData(id);
Java로 어떻게합니까?
답변
Java는 확장 메소드를 지원하지 않습니다.
대신 일반 정적 메서드를 만들거나 자신의 클래스를 작성할 수 있습니다.
답변
확장 메소드는 정적 메소드 일뿐 아니라 편의 구문 설탕 만이 아니라 실제로는 매우 강력한 도구입니다. 가장 중요한 것은 다른 제네릭의 매개 변수 인스턴스화에 따라 다른 방법을 재정의하는 기능입니다. 이것은 Haskell의 형식 클래스와 유사하며 실제로 C #의 Monads (LINQ)를 지원하기 위해 C #에있는 것처럼 보입니다. LINQ 구문을 삭제하더라도 Java에서 유사한 인터페이스를 구현하는 방법을 아직 모릅니다.
그리고 제네릭 매개 변수의 Java 유형 삭제 의미 때문에 Java로 구현할 수 없다고 생각합니다.
답변
Project Lombok@ExtensionMethod
은 요청한 기능을 달성하는 데 사용할 수 있는 주석 을 제공합니다 .
답변
기술적으로 C # Extension은 Java와 동등한 기능이 없습니다. 그러나보다 명확한 코드와 유지 관리 성을 위해 이러한 기능을 구현하려면 매니 폴드 프레임 워크를 사용해야합니다.
package extensions.java.lang.String;
import manifold.ext.api.*;
@Extension
public class MyStringExtension {
public static void print(@This String thiz) {
System.out.println(thiz);
}
@Extension
public static String lineSeparator() {
return System.lineSeparator();
}
}