第 30 条:优先考虑泛型方法

2021-05-12  本文已影响0人  综合楼
优先考虑泛型方法.jpeg
类型推导
public class GenericStaticFactory {
        // Generic static factory method
        public static <K, V> HashMap<K, V> newHashMap() {
               return new HashMap<K, V>();
       }
 
        public static void main(String[] args) {
               // Parameterized type instance creation with static factory
              Map<String, List<String>> anagrams = newHashMap ();    
       }
}
public class Union {
 
        // Generic method
        public static <E> Set<E> union(Set<E> s1, Set<E> s2) {
              Set<E> result = new HashSet<E>(s1);
              result.addAll(s2);
               return result;
       }
 
        // Simple program to exercise generic method
        public static void main(String[] args) {
              Set<String> guys = new HashSet<String>(Arrays.asList( "Tom", "Dick" ,
                            "Harry"));
              Set<String> stooges = new HashSet<String>(Arrays.asList( "Larry", "Moe",
                            "Curly"));
              Set<String> aflCio = union(guys, stooges);
              System. out.println(aflCio);
       }
}
static <T> List<T> emptyList();
List<String> listOne = Collections.emptyList();


void processStringList(List<String> stringList) {
    // process stringList
}
processStringList(Collections.emptyList());
泛型单例工厂
public class GenericSingletonFactory {
        // 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;
       }
 
        // Sample program to exercise generic singleton
        public static void main(String[] args) {
              String[] strings = { "jute", "hemp" , "nylon" };
              UnaryFunction<String> sameString = identityFunction();
               for (String s : strings)
                     System. out.println(sameString.apply(s));
 
              Number[] numbers = { 1, 2.0, 3L };
              UnaryFunction<Number> sameNumber = identityFunction();
               for (Number n : numbers)
                     System. out.println(sameNumber.apply(n));
       }
}

public interface NumberWrapper<T extends Number> {
     public double square(T num);
}
 
public class GenericFactory {
 
     private static NumberWrapper<Number> numWrapper = new NumberWrapper<Number>() {
          @Override
          public double square(Number num) {
               return num.doubleValue() * num.doubleValue();
          }
     };
 
     @SuppressWarnings("unchecked")
     public static <T extends Number> NumberWrapper<T> getWrapperInstance() {
          return (NumberWrapper<T>) numWrapper;
     }
 
     public static void main(String[] args) {
          NumberWrapper<Integer> integerWrapper = GenericFactory.getWrapperInstance();
          System.out.println(integerWrapper.square(2));
         
          NumberWrapper<Double> doubleWrapper = GenericFactory.getWrapperInstance();
          System.out.println(doubleWrapper.square(0.05));
     }
 
}

递归类型限制
   public static  <T extends Comparable<T>>  T max(List<T> list) {
        Iterator<T> i = list.iterator();
        T result = i.next();
        while(i.hasNext()) {
            T t = i.next();
            if(t.compareTo(result) > 0) {
                result = t;
            }
        }
        return result;
    }
上一篇下一篇

猜你喜欢

热点阅读