第27条 优先考虑泛型方法
package .fanxing27;
public class UnaryFunctionClass {
private static UnaryFunction<Object> IDENTY_FUNCTION=
new UnaryFunction<Object>() {
@Override
public Object apply(Object args) {
return args;
}
};
/**
* Type safety: Unchecked cast from UnaryFunction<Object> to UnaryFunction<T>
*
* @return
*/
@SuppressWarnings("unchecked")
public static <T> UnaryFunction<T> identifyFunction(){
return (UnaryFunction<T>) IDENTY_FUNCTION;
}
/**
* 使用同一个对象,好像多线程并发的时候,会有问题?
* 不会,是无状态的,单例,所以不会,不存在数据共享的问题.
* 所以泛型也可以做成单例的.
* 11
22
33
1
2
3
com.itrus.laweye.fanxing27.UnaryFunctionClass$1@15db9742
com.itrus.laweye.fanxing27.UnaryFunctionClass$1@15db9742
* @param args
*/
public static void main(String[] args) {
String[] strings = {"11","22","33"};
UnaryFunction<String> sameString = identifyFunction();
for (String string : strings) {
System.out.println(sameString.apply(string));
}
Integer[] integers = {1,2,3};
UnaryFunction<Integer> sameIntegers = identifyFunction();
for (Integer string : integers) {
System.out.println(sameIntegers.apply(string));
}
System.out.println(sameString);
System.out.println(sameIntegers);
}
}
package .fanxing27;
public interface UnaryFunction<T> {
T apply(T args);
}