java泛型的例子与理解

来源:互联网 发布:nginx静态代理 编辑:程序博客网 时间:2024/06/05 02:16

          首先,为什么会出现泛型。这个动机就是如果是类型错误,那么在编译的时候就会被捕获,而不是运行时当作ClassCastException在debug里面出现,所以将类型的检查从运行时移到编译时,有助于找到程序中的错误,提高程序的可靠性。

         泛型使用在3个地方,类、接口、方法的创建中,相对应的为泛型类、泛型接口、泛型方法。也就是说泛型是对于类型的通用性。不能将多态的概念混淆进来,二个没有直接的关系,一个是针对对象的,泛型是针对类的。

        接下来是关于泛型概念的几个例子,涵盖了泛型的应用。

1.泛型类和泛型的构造

/** * 泛型类 *  * @author Administrator *  * @param <T> *            name * @param <V> *            age */public class Person<T, V> {private T name;private V age;/** * 泛型类的构造方法定义 */public Person(T name, V age) {this.name = name;this.age = age;}public Person() {}public T getName() {return name;}public void setName(T name) {this.name = name;}public V getAge() {return age;}public void setAge(V age) {this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + "]";}}
2.泛型方法

/** * p是传入进来的,那么在创建p对象的时候,已经有了具体的类型,那么在这边还不知道p中的类型,那么用?去通配 * @param p */public static void function(Person<?, ?> p) {System.out.println(p.toString());}

泛型上限

/** * 泛型上限 * @param p */public static void function(Person<? extends String, ? extends Integer> p) {System.out.println(p.toString());}
泛型下限
/** * 泛型下限 * @param p */public static void function(Person<? super String, ? super Integer> p) {//此处时能用String或者objectSystem.out.println(p.toString());}

main函数

public static void main(String[] args) {Person<String, Integer> p = new Person<String, Integer>("kwj", 24);function(p);}

3.泛型接口

</pre><pre name="code" class="java">public interface DoSomething<T> {void doSomething(T t);}
结果

public class Play<T> implements DoSomething<T> {@Overridepublic void doSomething(T t) {System.out.println(t.getClass() + "~~~~~" + t.toString());}public static void main(String[] args) {Play<String> p = new Play<String>();p.doSomething("i am String");}}
另一种写法

public class Play implements DoSomething<String> {public static void main(String[] args) {Play p = new Play();p.doSomething("i am String");}@Overridepublic void doSomething(String t) {<pre name="code" class="java">               System.out.println(t.toString());
}}


0 0
原创粉丝点击