美文网首页
Effective Java - 优先考虑类型安全的异构容器

Effective Java - 优先考虑类型安全的异构容器

作者: DZQANN | 来源:发表于2022-06-26 22:57 被阅读0次
    1. 泛型最常用于集合,限制每个容器只能有固定数目的类型参数,比如Set只有一个参数,Map有两个参数。有时候会需要更多的灵活性,有一种方法可以做到这一点:将键进行参数化而不是将容器进行参数化

    2. 将键进行参数化的一个例子:

      public class Favorites {
          private Map<Class<?>, Object> favorites = new HashMap<>();
      
          public <T> void putFavorite(Class<T> type, T instance) {
              favorites.put(Objects.requireNonNull(type), instance);
          }
      
          public <T> T getFavorite(Class<T> type) {
              return type.cast(favorites.get(type));
          }
      }
      
    3. Java的语法目前不支持保证上面例子里,Map的Key和Value的对应关系,所以Value只能是Object

    4. Class类有一个asSubclass方法,可以将Class<?>转化成Class<? extends U>

      static Annotation getAnnotation(AnnotatedElement element,
                                          String annotationTypeName) {
        Class<?> annotationType = null; // Unbounded type token
        try {
          annotationType = Class.forName(annotationTypeName);
        } catch (Exception ex) {
          throw new IllegalArgumentException(ex);
        }
        return element.getAnnotation(
          annotationType.asSubclass(Annotation.class));
      }
      

    思考

    1. 泛型类的搭建主要还是框架,而业务开发大多只是使用泛型
    2. 其实Favourites的例子,就是一个小的DI框架,将Class作为key,对应的instance作为value
    3. Favourites例子里面的Map,其实value用通配符?会更好一点

    相关文章

      网友评论

          本文标题:Effective Java - 优先考虑类型安全的异构容器

          本文链接:https://www.haomeiwen.com/subject/ofoovrtx.html