您的位置:首页 > 编程语言 > Java开发

JAVA中泛型的理解

2016-12-20 22:23 423 查看
1.什么是泛型:

泛型:JDK1.5版本之后出现的新特性,用于解决安全问题,是一个安全机制;

我们用一个简单例子来展示。

public class Demo {
public static void main(String[] args) {
ArrayList<String> array=new ArrayList<>();
array.add("ashin");
array.add("monster");
array.add("stone");
array.add("masa");
array.add("ming");
array.add(5);

Iterator<String> iterator = array.iterator();
while(iterator.hasNext()){
String str = iterator.next();
System.out.println(str);
}
}
}


我们运行程序会出现:

Exception in thread “main” java.lang.Error: Unresolved compilation problem:

The method add(int, String) in the type ArrayList is not applicable for the arguments (int);

这就说明我们将ArrayList的类型指定为String类型了,这样当我们传入int类型的时候就会报错


2.泛型类

public class Demo {
public static void main(String[] args) {
Tool tool=new Tool();
tool.setS(new Student("monster")))
System.out.println(t.getS().toString());
}
}
//对Student添加工具类
class Tool{
private Student s;

public Student getS() {
return s;
}

public void setS(Student s) {
this.s = s;
}

}

class Student{
private String name;

public Student(String name){
this.name=name;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}

}

class worker{

}


//这样我们通过Tool类就可以访问我们的Studnet.class了,但是如果我们又要需要一个工具类去操作worker.class那我们又要去从写一个基于worker的工具类了。这时我们不妨用泛型

class tool<T>{
private T t;

public T getT() {
return t;
}

public void setT(T t) {
this.t = t;
}
}


这样我们就可以对每一个类为所欲为了,不用再去为每一个类写工具类了。

eg:
tool<Student> t=new tool();
t.setT(new Student("ashin"));
System.out.println(t.getT().toString);


什么时候定义泛型类?

当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展,现在定义泛型来完成扩展。

3.泛型方法

public class Demo {
public static void main(String[] args) {
Text<String> text=new Text();
text.show("ashin");
text.shard("monster");
}
}
class Text<T>{
public void show(T t){
System.out.println("show"+t);
}

public void shard(T t){
System.out.println("shard"+t);
}
}


// 为了让不同的方法可以操作不同的类型,而且类型不确定,那么可以将泛型定义在方法上。

class Text{
public <T> void show(T t){
}

public <T> void shard(T t){
}
}


4.泛型接口

public class Demo {
public static void main(String[] args) {
//定义泛型类型
InterImpl<Integer> i = new InterImpl<Integer>();
i.show(55);
}
}

//实现类
class Imp<T> implements Inter<T>{
@Override
public void show(T t) {
System.out.println("show:" + t);
}
}

interface Inter<T> {
void show(T t);
}


//感谢博客名为刘某人的java之旅,我想现在大家对泛型都有一个很好的理解了吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: