篇二:java泛型基础知识总结
Java泛型
Java泛型是java1.5中引入的新特性,在此之前,java通过对类型Object的引用来实现参数类型的“任意化”,特点则是需要进行显示的强制类型转换。(而这种显示的类型转换可能是无法进行的,是错误的)但编译器无法发现强制类型转换可能引起的异常,异常只有在运行时才能出现,成为了系统的安全隐患。----------------------------为啥要进入泛型这个概念 泛型的本质是参数化类型,及所操作的数据类型被指定为一个参数,此参数类型可以用在类、接口、和方法的声明及创建中,分别被称为泛型类,泛型接口,及泛型方法。 使用注意事项:
泛型的类型参数只能是类类型(包括自定义类),但是不能是简单类型 泛型类型参数可以是多个
泛型的参数类型还可以是通配符类型
没有泛型的错误:
Import java.util.*;
Public class NoGenericTypeDemo{
Public static void main(String[] args)
{
List names=new ArrayList();
Names.add("张桑拿");
Names.add(new Integer(2);
String nameFirst=(String)names.get(0);
String namesecond=(String)names.get(1);//抛出异常jav.lang.ClassCastException异常,而且编译时没有被发现
}
有时候需要使泛型变量能使用任何的类型,此时可以使用通配符”?”否则可能需要编写许多版本的重载函数,使用通配符,使方法printLsit()可以接受各种类型的List对象,否则必须使用重载技术,
Public static void printList(Listlist)
{
//输出集合中的元素
}
篇三:JAVA泛型的简单实例
简单普通类
package test7;
import java.util.ArrayList;
class Student
{
int Number;
String Name;
String Cla;
public int GetNumber()
{
return Number;
}
public void SetNumber(int Number)
{
this.Number = Number;
}
public String GetName()
{
return Name;
}
public void SetName(String Name)
{
this.Name = Name;
}
public String GetCla()
{
return Cla;
}
public void SetCla(String Cla)
{
this.Cla = Cla;
}
public Student(){}
public Student(int Number,String Name,String Cla)
{
this.Number = Number;
this.Name = Name;
this.Cla = Cla;
}
}
public class test071 {
public static void main(String[] args) {
System.out.println("设计者:");
Student s1 = new Student(123, "张三", "11计科");
Student s2 = new Student(124, "李四", "11计科");
Student s3 = new Student(125, "王五", "11计科");
Student dujingjing = new Student(20110105,"杜","11计科");
ArrayList AL = new ArrayList();
AL.add(s1);
AL.add(s2);
AL.add(s3);
AL.add(dujingjing);
for(int i = 0;i<AL.size();i++)
{
Student s = (Student)AL.get(i);
System.out.println("学号:" +s.Number + " 姓名:" +s.Name+ " 班级:" +s.Cla);
}
}
}
简单泛型实例
java中泛型定义
Java的泛型类就是一个用类型作为参数的类,即带有参数化类型的类。就像我们定义类的成员方法一样。大家很熟悉Java的成员方法形式是method(String str,int i),方法中参数str、i的值是可变的。而泛型也是一样的:class泛型类类名,这里的K和V就像方法中的参数str和i,也是可变的。
Class UseT{
Private T x;
Public SetX(T x){````````}
}
package test7;
泛型类:L2
class L2
{
private T obj;
public L2(T obj)
{
this.obj = obj;
}
public T getobj()
{
return this.obj;
}
public void setobj(T obj)
{
this.obj = obj;
}
public void showobj(T obj)
{
System.out.println("数据为:" + this.obj); }
}
主类:
public class test072 {
public static void main(String[] args) {
System.out.println("设计者:");
L2name = new L2("汽车"); name.showobj(name.getobj());
L2data = new L2(12); data.showobj(data.getobj());
}
}
简单集合类
篇四:java泛型总结
泛型总结篇:
1)泛型参数只能是类类型
例如:List// 报错
List// 正确
2)泛型的类型参数可以有多个!
例如:Listlist = new
ArrayList();
3)泛型的参数类型可以使用extends,习惯称“有界类型”,
例如:List,person为list的上界
4)泛型可以使用通配符类型!“?” 相当于“Object”类型,(注意不可逆) 例如:List //定义成这样可以添加Object类型到List里面去 List
; //定义成这样不可以添加String类型到List里面去 List; // 这样就可以互等了!这样还可以设定泛型的上限
5)带泛型的类,构造方法写法不变,其后不可以加泛型!
例如:class Student{
public Student(){} // 构造方法这样写就错了
}
6)List不是 List
的子类!,不可以把前者看成后者的子类,所以不
可以把前者的实例赋给后者
例如: ListSlist = new ArrayList();
Slist.add(new String("abc"));
List
Olist = new ArrayList
();
Olist.add("abc");
Olist = Slist; // 报错!
7)带不同泛型参数的实例可以共享类的静态方法和静态变量,所以静态方法和静态变量
申明的时候不可以使用类型行参
例如:class Cup{
static T info; // 报错!
public static setInfo(T info){}; // 报错!
}
8)带不同泛型参数的类是共享一个字节码文件的!反编译过后泛型参数就被擦除了
例如:ListSlist = new ArrayList();
Slist.add(new String("aaa"));
ListIlist = new ArrayList();
Ilist.add(new Integer(100));
System.out.println(Slist.getClass()==Ilist.getClass()); 结果为true;
9)当使用定义了泛型参数的接口 和 父类的时候!就不能在带参数了 例如:class Sub extends Father{} // 错误
10)
class T{}
public class typeTest extends T{}//报错
class T{}
public class typeTest extends T{} // 正确 可使用String等基本封装类型
class T{}
class Student{}
public class typeTest extends T{} // 这样也正确
11) 泛型方法 ,泛型方法的参数的作用域仅在本方法,要和方法带泛型区分开! Staticvoid test(ListS_list){} // 泛型参数要放在返回类型前
12)带有泛型的代码转换成没有泛型的代码由javac完成,虚拟机不处理这些事情!
这种技术叫做 “擦除”;
例如:class Food{
T size;
public Food(T size){} //注意构造方法不可以带泛型参数!
public void setSize(){ this.size = size; }
public T getSize(){ return this.size;}
}
public class test{
public static void main(String arg[]){
Fooda = new Food(6);
Ingeger as = a.getSize(); // 返回的是Integer的类型 Food b = a; //把a对象赋给Food变量;泛型参数类型会丢失 即擦除;
Number size1 = b.getSize(); // b只知道size的类型是Number // Integer in = b.getSize(); 这样是编译错误的!
} }
本文来源:http://www.010zaixian.com/gongwen/gongzuojihua/2972334.htm