`
dasheng
  • 浏览: 148612 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

<java编程思想>学习笔记15 第15章 范型

阅读更多

1,一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义的类。如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的约束就会很大。

 

2,范型接口

 

范型也可以应用于接口。

 

3,范型方法

 

类中可以包含参数化方法。

 

4,一个Set实用工具

 

下面的Set可以表达数学中的关系式。通过范型的方法很方便的做到这一点。

 

public class Sets {
  public static <T> Set<T> union(Set<T> a, Set<T> b) {
    Set<T> result = new HashSet<T>(a);
    result.addAll(b);
    return result;
  }
  public static <T>
  Set<T> intersection(Set<T> a, Set<T> b) {
    Set<T> result = new HashSet<T>(a);
    result.retainAll(b);
    return result;
  } 
  // Subtract subset from superset:
  public static <T> Set<T>
  difference(Set<T> superset, Set<T> subset) {
    Set<T> result = new HashSet<T>(superset);
    result.removeAll(subset);
    return result;
  }
  // Reflexive--everything not in the intersection:
  public static <T> Set<T> complement(Set<T> a, Set<T> b) {
    return difference(union(a, b), intersection(a, b));
  }
} ///:~

 

应用例子:

public class WatercolorSets {
  public static void main(String[] args) {
    Set<Watercolors> set1 =
      EnumSet.range(BRILLIANT_RED, VIRIDIAN_HUE);
    Set<Watercolors> set2 =
      EnumSet.range(CERULEAN_BLUE_HUE, BURNT_UMBER);
    print("set1: " + set1);
    print("set2: " + set2);
    print("union(set1, set2): " + union(set1, set2));
    Set<Watercolors> subset = intersection(set1, set2);
    print("intersection(set1, set2): " + subset);
    print("difference(set1, subset): " +
      difference(set1, subset)); 
    print("difference(set2, subset): " +
      difference(set2, subset));
    print("complement(set1, set2): " +
      complement(set1, set2));
  } 
} /* Output: (Sample)

 

 

下面的示例使用Set.defference()打印出java.util包中各种Collection类和Map类之间的方法的差异:

 

public class ContainerMethodDifferences {
  static Set<String> methodSet(Class<?> type) {
    Set<String> result = new TreeSet<String>();
    for(Method m : type.getMethods())
      result.add(m.getName());
    return result;
  }
  static void interfaces(Class<?> type) {
    System.out.print("Interfaces in " +
      type.getSimpleName() + ": ");
    List<String> result = new ArrayList<String>();
    for(Class<?> c : type.getInterfaces())
      result.add(c.getSimpleName());
    System.out.println(result);
  }
  static Set<String> object = methodSet(Object.class);
  static { object.add("clone"); }
  static void
  difference(Class<?> superset, Class<?> subset) {
    System.out.print(superset.getSimpleName() +
      " extends " + subset.getSimpleName() + ", adds: ");
    Set<String> comp = Sets.difference(
      methodSet(superset), methodSet(subset));
    comp.removeAll(object); // Don't show 'Object' methods
    System.out.println(comp);
    interfaces(superset);
  }
  public static void main(String[] args) {
    System.out.println("Collection: " +
      methodSet(Collection.class));
    interfaces(Collection.class);
    difference(Set.class, Collection.class);
    difference(HashSet.class, Set.class);
    difference(LinkedHashSet.class, HashSet.class);
    difference(TreeSet.class, Set.class);
    difference(List.class, Collection.class);
    difference(ArrayList.class, List.class);
    difference(LinkedList.class, List.class);
    difference(Queue.class, Collection.class);
    difference(PriorityQueue.class, Queue.class);
    System.out.println("Map: " + methodSet(Map.class));
    difference(HashMap.class, Map.class);
    difference(LinkedHashMap.class, HashMap.class);
    difference(SortedMap.class, Map.class);
    difference(TreeMap.class, Map.class);
  }
} ///:~

 

4,范型的局限:

 

 1  擦除:

 

     没有搞懂,写得太复杂。太乱,有时间再看。

分享到:
评论

相关推荐

    范型List Dictory增加事件功能

    在.NET框架中,`List&lt;T&gt;`和`Dictionary&lt;TKey, TValue&gt;`是两个常用的数据结构,分别代表泛型列表和泛型字典。它们都是系统提供的高效容器,用于存储和操作对象集合。然而,这两种数据结构在默认情况下并不直接支持...

    java 带两个类型参数的泛型

    在Java编程语言中,泛型是一种强大的特性,它允许我们在类、接口和方法中使用类型参数,从而提高代码的灵活性和可复用性。当我们谈论“java带两个类型参数的泛型”时,这意味着我们正在处理一个泛型类或泛型方法,...

    AIC的Java课程1-6章

    清华大学出版社&lt;br&gt; “SCJP学习指南” 人民邮电出版社&lt;br&gt; “Java 编程思想” 第3版 机械工业出版社&lt;br&gt; 教学内容和要求&lt;br&gt;知识点 重要程度 使用频度 难度&lt;br&gt;Java 入门 高 中 易&lt;br&gt;变量和运算符 高 高 中...

    Java 范型Java 范型.doc

    Java 范型Java 范型

    Java 范型攻略篇

    ### Java范型攻略篇:深度解析与应用 #### 一、引言:Java范型的引入 在Java的发展历程中,...在实际开发中,合理利用范型可以显著提升代码质量和维护效率,避免潜在的运行时错误,是现代Java编程不可或缺的一部分。

    Java程序设计范型和枚举PPT教案学习.pptx

    Java程序设计范型和枚举是Java编程中的关键概念,它们极大地增强了代码的类型安全性和重用性。本文将深入探讨这两个主题。 首先,我们来看什么是范型(Generics)。范型是Java SE 5.0引入的一个特性,它允许在类、...

    JAVA范型指南中文版

    Java 泛型是一种在编程中实现强类型检查和减少冗余类型转换的机制,它是在JDK 1.5版本中引入的。泛型的主要目标是提高代码的类型安全性、可读性和重用性,避免在运行时出现类型转换异常。 1. **泛型的基本概念** -...

    StudyJava:Java 基础学习(java编程思想和java技术核心卷)

    StudyJavaJava Basics1.java 基础学习2.java变成思想和java核心技术整理3.java8等java新特性学习整理###Java编程思想第1章 对象导论1.1 抽象过程1.2 每个对象都有一个接口1.3 每个对象都提供服务1.4 被隐藏的具体...

    jdk1.5中的范型

    在 Java 中,可以通过在类名或方法签名后面加上尖括号 `&lt;` 和 `&gt;` 来定义泛型类或方法。尖括号内的标识符代表类型参数。例如,在标准库中的 `List` 接口: ```java public interface List&lt;E&gt; extends Collection&lt;E&gt;...

    java范型学习

    泛型的声明通常在类、接口或方法声明中使用尖括号`&lt;&gt;`来指定类型参数。例如,`List&lt;E&gt;`中的`E`就是类型参数,表示列表中的元素类型。当我们创建`List`实例时,可以指定具体的类型,如`List&lt;String&gt; myList = new ...

    中文版Thinking in Java 4th编程思想(笔记)

    《中文版Thinking in Java 4th编程思想》是学习Java编程的重要参考资料,它深入浅出地介绍了面向对象编程的核心概念。下面将详细解读其中的主要知识点。 1. **对象导论** - **万物皆对象**:Java编程的核心是对象...

    java范型[参照].pdf

    泛型的基本语法是在类或接口名后使用尖括号`&lt;&gt;`来声明类型参数,如`List&lt;E&gt;`。这里的`E`是一个类型变量,代表一种待指定的类型。当我们实例化泛型类时,需要提供具体的类型,如`List&lt;String&gt;`或`List&lt;Integer&gt;`。在`...

    范型编程与设计模式之应用

    《C++设计新思维:范型编程与设计模式之应用》一书深入剖析了范型编程这一核心概念,以及在C++语言中的具体应用。范型编程,也称为泛型编程,是C++中的一项重要特性,它允许程序员编写不依赖特定数据类型的代码,...

    java 泛型类的类型识别示例

    在Java编程语言中,泛型(Generics)是一种强大的特性,它允许我们在编写代码时指定容器(如集合)可以存储的数据类型。这提高了代码的安全性和效率,因为编译器可以在编译时检查类型,避免了运行时...

    java 学习教学大纲笔记

    java 学习教学大纲笔记1.熟练掌握Java语言开发环境的配置 2.掌握Java语言的基本语法与编码规范 3.熟练掌握Java基本语法 4.熟练掌握数组的使用 5.掌握面向对向思想 6.掌握Java常用类 7.熟练掌握Java语言中的异常处理...

    java范型[参考].pdf

    泛型的基本语法是在类、接口或方法声明前加上尖括号`&lt;&gt;`,并在其中声明一个或多个类型参数。例如,`List&lt;E&gt;`中的`E`就是一个类型参数,代表一个未指定的具体类型。当我们实例化泛型类时,可以提供具体的类型来替换...

    七周七语言_理解多种编程范型-[PDF]

    《七周七语言:理解多种编程范型》共介绍了七种不同的编程语言。对于每种语言,分别介绍了各自的特性、应用,以及编程入门知识和关键编程范型,还带领读者使用能够代表该语言最重要特性的技术,解决某个不寻常的问题...

    七周七语言 理解多种编程范型

    编程范型是编程语言的核心思想和设计模式,理解它们对于提升编程能力至关重要。书中涵盖了函数式、面向对象、过程式、逻辑式等多种编程风格,旨在打破程序员对单一语言或范型的局限性,增强其编程思维的灵活性。 1....

Global site tag (gtag.js) - Google Analytics