泛型

作者: 鉴闻俗说 | 来源:发表于2017-11-06 22:01 被阅读0次
分别用几个demo说明一下泛型的用法。

1、 一个泛型变量

/**
 * 一个泛型
 *
 * @param <T> 泛型(类型变量)
 */
public class GenericFoo<T>
{
    private T foo;

    public T getFoo()
    {
        return foo;
    }

    public void setFoo(T foo)
    {
        this.foo = foo;
    }
    
    @Override
    public String toString()
    {
        // TODO Auto-generated method stub
        return super.toString();
    }
    
    public static void main(String[] args)
    {
        //将类型变量具化为Bollean,foo即为Boolean类型
        GenericFoo<Boolean> foo1 = new GenericFoo<>();
        //将类型变量具化为Integer,foo即为Integer类型
        GenericFoo<Integer> foo2 = new GenericFoo<>();
        
        //由于类只定义了set和get方法。所以只能通过set方法赋值,get方法取值
        foo1.setFoo(new Boolean(false));
        foo2.setFoo(new Integer(888));
        
        Boolean b = foo1.getFoo();
        Integer i = foo2.getFoo();
        
        System.out.println(b);
        System.out.println(i);
        
        
    }

}

2、 两个泛型变量

/**
 * 两个泛型
 *
 * @param <T1> 泛型变量T1
 * @param <T2> 泛型变量T2
 */
public class Generic<T1, T2>
{
    private T1 foo1;
    
    private T2 foo2;

    public T1 getFoo1()
    {
        return foo1;
    }

    public void setFoo1(T1 foo1)
    {
        this.foo1 = foo1;
    }

    public T2 getFoo2()
    {
        return foo2;
    }

    public void setFoo2(T2 foo2)
    {
        this.foo2 = foo2;
    }
    
    public static void main(String[] args)
    {
        Generic<Integer, Boolean> foo = new Generic<>();
        
        foo.setFoo1(new Integer(88));
        foo.setFoo2(new Boolean(true));;
        
        System.out.println(foo.getFoo1());
        System.out.println(foo.getFoo2());
    }
}

3、 数组泛型

/**
 * 数组泛型
 *
 * @param <T> 泛型变量
 */
public class Generic2<T>
{
    private T[] fooArry;

    public T[] getFooArry()
    {
        return fooArry;
    }

    public void setFooArry(T[] fooArry)
    {
        this.fooArry = fooArry;
    }
    
    public static void main(String[] args)
    {
        Generic2<String> foo = new Generic2<>();
        
        String[] str1 = {"hi", "hello", "what"};
        
        foo.setFooArry(str1);
        
        String[] str2 =foo.getFooArry();
        for(String s : str2)
            System.out.println(s);
    }
}

4、 集合泛型

/**
 * 自定义集合泛型
 *
 * @param <T>
 */
public class SimpleCollection<T>
{
    private T[] objArr;
    
    private int index = 0;

    @SuppressWarnings("unchecked")
    public SimpleCollection()
    {
        //此处不能直接new T[10]。只能new一个Object数组,
        //如果objArr定义的是Object类型,此处不用强制转换,
        //但是取出来的时候需要强制转换为T类型
        this.objArr = (T[])new Object[10];
    }

    @SuppressWarnings("unchecked")
    public SimpleCollection(int capacity)
    {
        this.objArr = (T[])new Object[capacity];
    }
    
    public void add(T t)
    {
        this.objArr[index++] = t;
    }
    
    public T get(int i)
    {
        return this.objArr[i];
    }
    
    
    public static void main(String[] args)
    {
        SimpleCollection<Integer> coll = new SimpleCollection<>();
        
        for(int i = 0; i < 10; i++)
            coll.add(i);
        
        for(int i = 0; i < 10; i++)
        {
            Integer in = coll.get(i);
            System.out.println(in);
        }
    }   
}

5、泛型的泛型

/**
 * 泛型的泛型
 *
 * @param <T>
 */
public class WrapperFoo<T>
{
    private GenericFoo3<T> foo3;

    public GenericFoo3<T> getFoo3()
    {
        return foo3;
    }

    public void setFoo3(GenericFoo3<T> foo3)
    {
        this.foo3 = foo3;
    }

    public static void main(String[] args)
    {
        GenericFoo3<Integer> foo = new GenericFoo3<>();
        foo.setT(-10);
        
        WrapperFoo<Integer> wrapper = new WrapperFoo<>();
        wrapper.setFoo3(foo);
        
        GenericFoo3<Integer> g = wrapper.getFoo3();
        System.out.println(g.getT());
    }
    
}

/**
*一个泛型变量的泛型类
*/
class GenericFoo3<T>
{
    private T t;

    public T getT()
    {
        return t;
    }

    public void setT(T t)
    {
        this.t = t;
    }
    
}

上一篇:自定义TreeMap的比较器
下一篇:泛型高级进阶

相关文章

  • 泛型 & 注解 & Log4J日志组件

    掌握的知识 : 基本用法、泛型擦除、泛型类/泛型方法/泛型接口、泛型关键字、反射泛型(案例) 泛型 概述 : 泛型...

  • 【泛型】通配符与嵌套

    上一篇 【泛型】泛型的作用与定义 1 泛型分类 泛型可以分成泛型类、泛型方法和泛型接口 1.1 泛型类 一个泛型类...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • 探秘 Java 中的泛型(Generic)

    本文包括:JDK5之前集合对象使用问题泛型的出现泛型应用泛型典型应用自定义泛型——泛型方法自定义泛型——泛型类泛型...

  • Web笔记-基础加强

    泛型高级应用 自定义泛型方法 自定义泛型类 泛型通配符? 泛型的上下限 泛型的定义者和泛型的使用者 泛型的定义者:...

  • 重走安卓进阶路——泛型

    ps.原来的标题 为什么我们需要泛型? 泛型类、泛型接口和泛型方法(泛型类和泛型接口的定义与泛型方法辨析); 如何...

  • Kotlin泛型的高级特性(六)

    泛型的高级特性1、泛型实化2、泛型协变3、泛型逆变 泛型实化 在Java中(JDK1.5之后),泛型功能是通过泛型...

  • Java 19-5.1泛型

    泛型类定义泛型类可以规定传入对象 泛型类 和泛型方法 泛型接口 如果实现类也无法确定泛型 可以在继承类中确定泛型:

  • 【Swift】泛型常见使用

    1、Swift泛型4种 泛型函数泛型类型泛型协议泛型约束 2、泛型约束3种 继承约束:泛型类型 必须 是某个类的子...

网友评论

      本文标题:泛型

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