精华内容
下载资源
问答
  • Java中的泛型

    2017-10-08 18:45:40
    Java中的泛型

      集合中的元素,可以是任意类型的对象,或者说是对象的引用。如果把某个对象放入集合,则会忽略他的类型,而把他当做Object处理。泛型则是规定了某个集合只可以存放特定类型的对象,并且会在编译期间进行类型检查,可以直接按指定类型获取集合元素

      泛型集合中不能添加泛型规定的类型及其子类型以外的对象,否则会报错!

    import java.util.ArrayList;
    import java.util.List;
    public class TestGeneric{
      public List<Course> courses;
      public TestGeneric(){
        this.courses = new ArrayList<Course>();
      }
      public void testAdd(){
        Course cr1 = new Course("1","大学语文");
        courses.add(cr1);
        //泛型集合中不能添加泛型规定的类型及其子类型以外的对象,否则会报错!
        //courses.add("能否添加一些奇怪的东西呢?");
        Course cr2 = new Course("2","Java基础");
        courses.add(cr2);
      }
      public void testForEach(){
        for(Course cr:courses){
          System.out.println(cr.id+":"+cr.name);
        }
      }
      public static void main(String[] args){
        TestGeneric tg = new TestGeneric();
        tg.testAdd();
        tg.testForEach();
      }
    }      

    运行结果:

      1:大学语文
      2:Java基础

      实际上,在泛型集合中,除了能存储泛型类型,还能存储泛型的子类型的对象实例。

    public class ChildCourse extends Course{
    }
    
    import java.util.ArrayList;
    import java.util.List;
    public class TestGeneric{
      public List<Course> courses;
      public TestGeneric(){
        this.courses = new ArrayList<Course>();
      }
      public void testAdd(){
        Course cr1 = new Course("1","大学语文");
        courses.add(cr1);
        //泛型集合中不能添加泛型规定的类型以外的对象,否则会报错!
        //courses.add("能否添加一些奇怪的东西呢?");
        Course cr2 = new Course("2","Java基础");
        courses.add(cr2);
      }
      public void testForEach(){
        for(Course cr:courses){
          System.out.println(cr.id+":"+cr.name);
        }
      }
      //泛型集合可以添加泛型的子类型的对象实例
      public void testChild(){
        ChildCourse ccr = new ChildCourse();
        ccr.id = "3";
        ccr.name = "我是子类型的课程对象实例";
        courses.add(ccr);
      }**重点内容**
    
      public static void main(String[] args){
        TestGeneric tg = new TestGeneric();
        tg.testAdd();
        tg.testForEach();
        tg.testChild();
        tg.testForEach();
      }
    }

    运行结果:

      1:大学语文
      2:Java基础
      1:大学语文
      2:Java基础
      3:我是子类型的课程对象实例

    注意:

    1. 泛型集合中的限定类型不能使用基本数据类型,如int,long,boolean
    2. 可以通过使用包装类限定允许存入的基本数据类型,如Integer,Long,Boolean
    展开全文
  • java中的泛型

    千次阅读 2020-10-03 21:57:21
    java中的泛型有什么用? \quad在 Java 5 泛型出来之前,集合中保存的是通用类型 Object。Java 单继承的结构意味着所有元素都基于 Object 类,所以在集合中可以保存任何类型的数据,易于重用。要使用这样的集合,我们...

    java中的泛型有什么用?

    \quad在 Java 5 泛型出来之前,集合中保存的是通用类型 Object。Java 单继承的结构意味着所有元素都基于 Object 类,所以在集合中可以保存任何类型的数据,易于重用。要使用这样的集合,我们先要往集合添加元素。由于 Java 5 版本前的集合只保存 Object,当我们往集合中添加元素时,元素便向上转型成了 Object,从而丢失自己原有的类型特性。这时我们再从集合中取出该元素时,元素的类型变成了 Object。那么我们该怎么将其转回原先具体的类型呢?这里,我们使用了强制类型转换将其转为更具体的类型,这个过程称为对象的“向下转型”。通过“向上转型”,我们知道“圆形”也是一种“形状”,这个过程是安全的。可是我们不能从“Object”看出其就是“圆形”或“形状”,所以除非我们能确定元素的具体类型信息,否则“向下转型”就是不安全的。也不能说这样的错误就是完全危险的,因为一旦我们转化了错误的类型,程序就会运行出错,抛出“运行时异常”(RuntimeException)。(后面的章节会提到) 无论如何,我们要寻找一种在取出集合元素时确定其具体类型的方法。另外,每次取出元素都要做额外的“向下转型”对程序和程序员都是一种开销。以某种方式创建集合,以确认保存元素的具体类型,减少集合元素“向下转型”的开销和可能出现的错误难道不好吗?这种解决方案就是:参数化类型机制(Parameterized Type Mechanism)。
    \quad 参数化类型机制可以使得编译器能够自动识别某个 class 的具体类型并正确地执行。举个例子,对集合的参数化类型机制可以让集合仅接受“形状”这种类型的元素,并以“形状”类型取出元素。Java 5 版本支持了参数化类型机制,称之为“泛型”(Generic)。泛型是 Java 5 的主要特性之一。你可以按以下方式向 ArrayList 中添加 Shape(形状):

    ArrayList<Shape> shapes = new ArrayList<>();
    

    注:以上例子,如果不加泛型的话,那就是默认返回Oject类

    展开全文
  • JAVA中的泛型

    2014-03-19 21:37:23
    JAVA中的泛型
    JAVA中的泛型
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,605
精华内容 7,842
关键字:

java中的泛型

java 订阅