3
A
답변
4
당신이 반사를 통해 메소드를 호출 할 수 Method
및 MethodHandles
을 가지고 있지만 아직 언어에서 지원되지 않습니다.
Java 8에서는 메소드에 대한 참조를 사용할 수 있습니다.
3
오늘의 자바에서는 그렇지 않습니다.
가장 가까운 인터페이스는 다음과 같습니다. 함수는 저장하지 않고 원하는 기능을 정의하는 인터페이스를 구현합니다.
전형적인 예는 the Comparator interface의 구현 : 자바에서
Comparator<ProductSearchResult> c = new Comparator<ProductSearchResult>() {
public int compare(ProductSearchResult result1, ProductSearchResult result2) {
return result1.product.getRsId().compareTo(result2.product.getRsId());
}
};
Collections.sort(groupResults, c); // I pass a function, wrapped in my Comparator implementation
1
가장 가까운 것은 인터페이스와 결합 된 내부 클래스입니다. 이것들은 선호된다면 마스터 클래스 메소드로 다시 위임 될 수있는 하나의 기능 만이 아니라 많은 기능 (메소드)을 가질 수 있습니다. 그러나이 솔루션은 쉽게 너무 무거울 수 있습니다.
class Main {
interface X {
void doX();
}
class Ref1 implements X {
void doX() { doA(); };
}
class Ref2 implements X {
void doX() { doB(); };
}
void doA() { };
void doB() { };
void demo() {
X x = new Ref1();
x.doX();
}
}
0
0
이 ... (당신이 문자열 이외의 것을 사용하는 경우는 조금 더 캐스팅이 필요합니다,하지만 난 예제 간단한 유지하고있어) 람다에 비슷한 시뮬레이션
public class MyTest {
public static void main(String[] args) {
Lambda l = new Lambda() { public Object func(Object x)
{ return "Hello " + x; }
};
System.out.println(l.func("Bob"));
System.out.println(nowTryFromMethod(l));
System.out.println((new Lambda() { public Object func(Object x)
{ return "Goodbye " + x; }
}).func("Harry"));
}
private static Object nowTryFromMethod(Lambda l) {
return l.func("Jerry");
}
}
class Lambda {
public Object func(Object x) { return null; }
}
출력 :
Hello Bob
Hello Jerry
Goodbye Harry
아니요 : Java에는 일류 기능이 없습니다. –