effective java 第27条 优先考虑泛型方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/y41992910/article/details/89818572

第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);
	
}

猜你喜欢

转载自blog.csdn.net/y41992910/article/details/89818572