黑马程序员-泛型

来源:互联网 发布:java开发图形界面 编辑:程序博客网 时间:2024/06/01 11:46

------- android培训、java培训、期待与您交流! ----------

在没有泛型之前,集合加入对象会忘记对象的类型,把所有对象当成Object类型处理,当取出时比较麻烦,也容易引起ClassCasExeception异常,集合增加泛型处理后,如果向集合中添加不满足类型要求的对象,编译器会提示错误。

通过一个没有标明泛型的例子来说明下

public class Test {public static void main(String args[]){List list = new ArrayList(); list.add("1"); //添加字符串类型list.add("2"); //添加字符串类型list.add(3); //添加Integer类型for(int i=0;i<list.size();i++){String s = (String)list.get(i);System.out.println();}}}

编译和运行:

D:\heima\heima_p\src>javac Test.java
注意:Test.java 使用了未经检查或不安全的操作。
注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译。

D:\heima\heima_p\src>java Test
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer canno
t be cast to java.lang.String
        at Test.main(Test.java:12)

很明显能通过编译,但是运行出现错误

有定义泛型的例子

public class Test {public static void main(String args[]){List<String> list = new ArrayList<String>(); list.add("1"); //添加字符串类型list.add("2"); //添加字符串类型list.add(3); //添加Integer类型for(int i=0;i<list.size();i++){String s = (String)list.get(i);System.out.println();}}}

编译:

D:\heima\heima_p\src>javac Test.java
Test.java:10: 找不到符号
符号: 方法 add(int)
位置: 接口 java.util.List<java.lang.String>
                list.add(3); //添加Integer类型
                    ^
1 错误

很明显看出定义了泛型的集合连编译都没通过,限定了集合添加对象的类型必须要满足才能通过比编译

 

泛型可以解决数据类型的安全性问题,主要原理是在类或集合声明时通过一个标识表示类中某个属性或者某个方法的返回值及参数类型,然后在实例化指定需要的类型即可

泛型类定义格式

[访问权限] class 类名称<泛型类型1,泛型类型2,...,泛型类型n>{

                  [访问权限] 泛型类型标识 变量名称;

                  [访问权限] 泛型类型标识 方法名称(){};

                  [访问权限] 返回值类型声明 方法名称(泛型类型标识 变量名){} ;

}

泛型对象定义

类名称<具体类> 对象名称 = new 类名称<具体类>();

注:在泛型的指定中是无法指定基本数据类型的,必须要设置成类的形式,可以使用包装类

泛型构造方法定义格式

[访问权限] 构造方法([<泛型类型> 参数名称]){}

 

------- android培训、java培训、期待与您交流! ----------

 

 

原创粉丝点击