zoukankan      html  css  js  c++  java
  • java泛型介绍

    泛型基础

      泛型类

      我们首先定义一个简单的Box类:

    public class Box {
        private String object;
        public void set(String object) { this.object = object; }
        public String get() { return object; }
    }
    

      这是最常见的做法,这样做的一个坏处是Box里面现在只能装入String类型的元素,今后如果我们需要装入Integer等其他类型的元素,还必须要另外重写一个Box,代码得不到复用,使用泛型可以很好的解决这个问题。

    public class Box<T> {
        // T stands for "Type"
        private T t;
        public void set(T t) { this.t = t; }
        public T get() { return t; }
    }
    

      

    这样我们的Box类便可以得到复用,我们可以将T替换成任何我们想要的类型:
    Box<Integer> integerBox = new Box<Integer>();
    Box<Double> doubleBox = new Box<Double>();
    Box<String> stringBox = new Box<String>();
    

      

    泛型方法
      看完了泛型类,接下来我们来了解一下泛型方法。声明一个泛型方法很简单,只要在返回类型前面加上一个类似<K, V>的形式就行了:
    public class Util {
        public static <K, V> boolean compare(Pair<K, V> p1, Pair<K, V> p2) {
            return p1.getKey().equals(p2.getKey()) &&
                   p1.getValue().equals(p2.getValue());
        }
    }
    public class Pair<K, V> {
        private K key;
        private V value;
        public Pair(K key, V value) {
            this.key = key;
            this.value = value;
        }
        public void setKey(K key) { this.key = key; }
        public void setValue(V value) { this.value = value; }
        public K getKey()   { return key; }
        public V getValue() { return value; }
    }
    

      

    我们可以像下面这样去调用泛型方法:
    Pair<Integer, String> p1 = new Pair<>(1, "apple");
    Pair<Integer, String> p2 = new Pair<>(2, "pear");
    boolean same = Util.<Integer, String>compare(p1, p2);
    

      

    边界符

    现在我们要实现这样一个功能,查找一个泛型数组中大于某个特定元素的个数,我们可以这样实现:

    public interface Comparable<T> {
        public int compareTo(T o);
    }
    
    
    public static <T extends Comparable<T>> int countGreaterThan(T[] anArray, T elem) {
        int count = 0;
        for (T e : anArray)
            if (e.compareTo(elem) > 0)
                ++count;
        return count;
    }
    

      

  • 相关阅读:
    C# ToString格式大全
    如何将数据库中的表导入到PowerDesigner中
    IIS配置wap服务器
    URL加随机数的作用
    程序员人生路
    Asp.net三种事务处理
    20121107荣迪信息技术有限公司面试总结
    ubuntu 安装之后的问题
    windows系统+VS2013编译GDAL(使用cmd命令行)
    VS2013+OPENCV+GDAL处理多光谱数据
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6785711.html
Copyright © 2011-2022 走看看