玩命加载中 . . .

泛型初步(47)


泛型初步

泛型能更早的发现错误,如类型转换错误,通常在运行期才会发现,如果使用泛型,那么在编译期将会发现,通常错误发现的越早,越容易调试,越容易减少成本。(泛型与包装类型一样都是编译阶段触发)

  1. 为什么可以引入泛型?

    1. 可以统一集合中的数据类型。
    2. 可以减少将之类型的转换。
  2. 泛型的优缺点?

    • 优点:统一类型,减少强制类型转换。
    • 缺点:类型太统一。
  3. 以下程序若没有使用泛型,有什么缺点?

    • 如果集合不使用泛型,则集合中的元素不统一,在大量集合遍历时候,只可以拿出Object类型,
    • 需要做大量的强制类型转换,太麻烦。
    • 示例代码01:
        public static void main(String[] args) {
            // 创建一个集合使用泛型
            SortedSet<Manager> s = new TreeSet<Manager>();
            Manager m1 = new Manager("JACK",2000);
            Manager m2 = new Manager("MAkEE",4080);
            Manager m3 = new Manager("ARRAY",8090);
            s.add(m1);
            s.add(m2);
            s.add(m3);
            // 创建一个迭代器使用泛型,并遍历集合内的数据
            Iterator<Manager> i = s.iterator();
            while (i.hasNext()) {
                System.out.println(i.next());
            }
        }
    class Manager implements Comparable<Manager> {
        @Override
        public int compareTo(Manager o) {
            int wage1 = this.wage;
            int wage2 = o.getWage();
            if (wage1>wage2) {
                return 1;
            }else if (wage1<wage2) {
                return -1;
            }
            return 0;
        }
    
        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;
            Manager manager = (Manager) o;
            return wage == manager.wage && Objects.equals(name, manager.name);
        }
    
        @Override
        public int hashCode() {
            return Objects.hash(name, wage);
        }
    
        // 姓名
        private String name;
        // 工资
        private int wage;
    
        public Manager(String name, int wage) {
            this.name = name;
            this.wage = wage;
        }
    
        @Override
        public String toString() {
            return "Manager{" +
                    "name='" + name + '\'' +
                    ", wage=" + wage +
                    '}';
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getWage() {
            return wage;
        }
    
        public void setWage(int wage) {
            this.wage = wage;
        }
    }
    
  4. 自定义泛型

    以下程序因为Test类中规定只能传入相同数据类型,当测试类String类型出入则后期不可以传入其他数据类型.这样可以规范数据类的统一,方便同时调用。

    • 示例代码02:

      public class GenericTest02 {
          public static void main(String[] args) {
              // 自定义泛型
              Test<String> t = new Test<String>();
              t.m1("111");
          }
      }
      class Test<T> {
          public void m1(T t) {
              System.out.println(t);
          }
      }
      

文章作者: 小靳同学
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小靳同学 !
评论
 上一篇
IO流(49) IO流(49)
IO流字符流 字符输入流 FileReader 字节输出流 FileWriter 字节流 字节输入流 FileInputStream 字节
2021-10-03
下一篇 
for增强(48) for增强(48)
for增强关于for增强: 语法: for(类型 变量: 数组名/变量名){} 集合想要使用for增强必须使用泛型,如果不使用泛型的话
2021-10-03
  目录