UnaryOperator identityFunction() { return (UnaryOperator) IDENTITY_FN; } // 제네릭 싱글턴을 사용하는 예 public static void main(String[] args) { String[] strings = {"삼베", "대마", "나일론" }; UnaryOperator sameString = identityFunction(); for (String s : strings) System.out.println(sameString.apply(s)); Number[] numbers = { 1, 2.0, 3L }; UnaryOperator sameNumber = identityFunction(); for (Number n : numbers) System.out.println(sameNumber.apply(n))l }"> UnaryOperator identityFunction() { return (UnaryOperator) IDENTITY_FN; } // 제네릭 싱글턴을 사용하는 예 public static void main(String[] args) { String[] strings = {"삼베", "대마", "나일론" }; UnaryOperator sameString = identityFunction(); for (String s : strings) System.out.println(sameString.apply(s)); Number[] numbers = { 1, 2.0, 3L }; UnaryOperator sameNumber = identityFunction(); for (Number n : numbers) System.out.println(sameNumber.apply(n))l }"> UnaryOperator identityFunction() { return (UnaryOperator) IDENTITY_FN; } // 제네릭 싱글턴을 사용하는 예 public static void main(String[] args) { String[] strings = {"삼베", "대마", "나일론" }; UnaryOperator sameString = identityFunction(); for (String s : strings) System.out.println(sameString.apply(s)); Number[] numbers = { 1, 2.0, 3L }; UnaryOperator sameNumber = identityFunction(); for (Number n : numbers) System.out.println(sameNumber.apply(n))l }">
// 제네릭 싱글턴 팩터리 패턴

private static UnaryOperator<Object> IDENTITY_FN = (t) -> t;

@SuppressWarnings("unchecked")
public static <T> UnaryOperator<T> identityFunction() {
	return (UnaryOperator<T>) IDENTITY_FN;
}

// 제네릭 싱글턴을 사용하는 예
public static void main(String[] args) {
	String[] strings = {"삼베", "대마", "나일론" };
	UnaryOperator<String> sameString = identityFunction();
	for (String s : strings)
		System.out.println(sameString.apply(s));
		
	Number[] numbers = { 1, 2.0, 3L };
	UnaryOperator<Number> sameNumber = identityFunction();
	for (Number n : numbers)
		System.out.println(sameNumber.apply(n))l
}

재귀적 타입 한정