UnaryFunction
인터페이스가 으로 정의되어 있다고 가정합니다. Effective Java generics 장.이 검사되지 않은 경고를 억제하는 것이 안전합니까?
public interface UnaryFunction<T> {
T apply(T arg);
}
하고 왜 (UnaryFunction<T>)
에 IDENTITY_FUNCTION
의 캐스트가 안전하게 UnaryFunction
// Generic singleton factory pattern
private static UnaryFunction<Object> IDENTITY_FUNCTION = new UnaryFunction<Object>() {
public Object apply(Object arg) { return arg; }
};
// IDENTITY_FUNCTION is stateless and its type parameter is
// unbounded so it's safe to share one instance across all types.
@SuppressWarnings("unchecked")
public static <T> UnaryFunction<T> identityFunction() {
return (UnaryFunction<T>) IDENTITY_FUNCTION;
}
을 반환하는 다음 코드?
이 책에서는 내가 묻는 질문에 대해 이렇게 말했지만, 여기서 논리를 따를 수는 없다. 신원 작업을 수행하는 apply
함수를 어디에서 호출할까요? 나는 아무것도 수정하지 않고 동일한 객체를 전달하는 함수이기 때문에 혼란 스럽다. UnaryFunction<Object>
모든 T
에 대한 UnaryFunction<T>
아니므로
(UnaryFunction<T>)
에 IDENTITY_FUNCTION의 캐스팅은 되지 않은 캐스트 경고를 생성합니다. 이 인수가 수정되지 않은 반환, 그래서 우리는 형태 보증은T
의 무엇이든 값이UnaryFunction<T>
으로 에게 그것을 사용하는 것을 알고 :하지만 신원 기능은 특별하다. 따라서 은이 캐스트를 에 의해 생성 된 검사되지 않은 캐스트 경고를 자신있게 표시하지 않을 수 있습니다. 이 작업을 완료하면 오류없이 코드가 컴파일되거나 경고가 표시됩니다. 타입 삭제T apply(T arg);
와
사이드 질문 : 어떤 책을 사용하고 있으며이 코드의 요점은 무엇입니까? – asteri
@Jeff Effective java는 책 이름이며 generic 함수를 설명하는 절에서 제네릭 장에 있습니다. – Geek