zoukankan      html  css  js  c++  java
  • 泛型

    •泛型是JDK1.5中一个最重要的特征。通过引入泛型,我们将获得编译时类型的安全和运行时更小地抛出ClassCastExceptions的可能。

    •在JDK1.5中,你可以声明一个集合将接收/返回的对象的类型

    泛型定义:

    public class GenericFoo<T>
    { private T foo; public void setFoo(T foo)
    { this.foo = foo; } public T getFoo()
    { return foo; }
    }

    在定义泛型类别时,预设可以使用任何的类型来实例化泛型类型中的类型,但是如果想要限制使用泛型类别时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口。

     1 public class WrapperFoo<T>
     2 {
     3     private GenericFoo3<T> foo;
     4 
     5     public GenericFoo3<T> getFoo()
     6     {
     7         return foo;
     8     }
     9 
    10     public void setFoo(GenericFoo3<T> foo)
    11     {
    12         this.foo = foo;
    13     }
    14     
    15     public static void main(String[] args)
    16     {
    17         GenericFoo3<Integer> foo = new GenericFoo3<Integer>();
    18         foo.setFoo(new Integer(-10));
    19         
    20         WrapperFoo<Integer> wrapper = new WrapperFoo<Integer>();
    21         wrapper.setFoo(foo);
    22         
    23         GenericFoo3<Integer> g = wrapper.getFoo();
    24         System.out.println(g.getFoo());
    25     }
    26     
    27 }
    28 
    29 
    30 class GenericFoo3<T>
    31 {
    32     private T foo;
    33 
    34     public T getFoo()
    35     {
    36         return foo;
    37     }
    38 
    39     public void setFoo(T foo)
    40     {
    41         this.foo = foo;
    42     }
    43 }
    View Code

    使用<?>或是<? extends SomeClass>的声明方式,意味著您只能通过该名称來取得所参考实例的信息,或者是移除某些信息,但不能增加它的信息,因为只知道当中放置的是SomeClass的子类,但不确定是什么类的实例,编译器不让您加入信息,理由是,如果可以加入信息的話,那么您就得記得取回的实例是什么类型,然后转换为原來的类型方可进行操作,这就失去了使用泛型的意义。

     1 import java.util.ArrayList;
     2 import java.util.LinkedList;
     3 import java.util.List;
     4 
     5 public class GenericTest<T>
     6 {
     7     private T foo;
     8 
     9     public T getFoo()
    10     {
    11         return foo;
    12     }
    13 
    14     public void setFoo(T foo)
    15     {
    16         this.foo = foo;
    17     }
    18     
    19     public static void main(String[] args)
    20     {
    21         GenericTest<? extends List> ge = null;
    22         
    23         ge = new GenericTest<ArrayList>();
    24         ge = new GenericTest<LinkedList>();
    25         
    26         //ge = new GenericTest<HashMap>();
    27         
    28         GenericTest<? super List> ge2 = null;
    29         
    30         ge2 = new GenericTest<Object>();
    31         
    32         GenericTest<String> ge3 = new GenericTest<String>();
    33         ge3.setFoo("hello world");
    34         
    35         GenericTest<?> ge4 = ge3;
    36         
    37         System.out.println(ge4.getFoo());
    38         
    39         ge4.setFoo(null);
    40         
    41         System.out.println(ge4.getFoo());
    42             
    43     }
    44 }
    View Code
  • 相关阅读:
    简单学习MyBatis
    探讨AOP的两种实现方式
    浅析Spring AOP术语
    依赖注入(DI)的迭代实现
    初识依赖注入(DI)
    Bean工厂ApplicationContext
    ps文章推荐
    ueditor全屏和el-dialog模态框有冲突的解决方法(其他框架请比葫芦画瓢)
    (各种转载)
    element-ui修改样式不生效的官网解决方式
  • 原文地址:https://www.cnblogs.com/daneres/p/4504842.html
Copyright © 2011-2022 走看看