java interface泛型_java泛型 之 入门(interface)

一:泛型简单介绍:

(1)所谓泛型,就是变量类型的參数化。

泛型是JDK1.5中一个最重要的特征。通过引入泛型,我们将获得编译时类型的安全和执行时更小的抛出ClassCastException的可能。在JDK1.5中,你能够声明一个集合将接收/返回的对象的类型。使用泛型时假设不指明參数类型,即泛型类没有參数化。会提示警告。此时类型为Object。

(2)为什么使用泛型

使用泛型的典型样例。是在集合中的泛型使用。假设不使用泛型。存入集合中的元素能够是不论什么类型的,当从集合中取出时,全部的元素都是Object类型。须要进行向下的强制类型转换,转换到特定的类型。

比方:

List myIntList = new LinkedList(); // 1

myIntList.add(new Integer(0)); // 2

Integer x = (Integer) myIntList.iterator().next(); // 3

第三行的这个强制类型转换可能会引起执行时的错误。

泛型的思想就是由程序猿指定类型。这样集合就仅仅能容纳该类型的元素。

使用泛型:

List myIntList = new LinkedList(); // 1'

myIntList.add(new Integer(0)); // 2'

Integer x = myIntList.iterator().next(); // 3'

将第三行的强制类型转换变为了第一行的List类型说明。编译器会为我们检查类型的正确性。这样,代码的可读性和健壮性也会增强。

(3)泛型使用基础

public interface List  {

void add(E x);

Iterator iterator();

}

public interface Iterator {

E next();

boolean hasNext();

}

尖括号里包括的是形式类型參数(formal type parameters),它们就如同一般的类型一样。能够在整个类的声明中被使用。当类被使用时。会使用详细的实际类型參数(actual type argument)取代。比方前面的样例中的List,那么全部的E将会被Integer类型所取代。

泛型类型參数仅仅能被类或接口类型赋值,不能被原生数据类型赋值。原生数据类型须要使用相应的包装类。

形式类型參数的命名:尽量使用单个的大写字母(有时候多个泛型类型时会加上数字。比方T1,T2)。比方很多容器集合使用E,代表element(元素)。Map中用K代表键keys,V代表值。

二 实际应用:

(1) 创建接口ParentInterface 的java文件

package edu.tju.cs;

public interface ParentInterface{

public void setFoo1(T1 foo1);

public void setFoo2(T2 foo2);

public T1 getFoo1();

public T2 getFoo2();

}

(2) 创建实现类ChildClass的java文件

package edu.tju.cs;

public class ChildClass implements ParentInterface{

private T1 foo1;

private T2 foo2;

@Override

public void setFoo1(T1 foo1){

this.foo1 = foo1;

}

@Override

public void setFoo2(T2 foo2){

this.foo2 = foo2;

}

@Override

public T1 getFoo1(){

return this.foo1;

}

@Override

public T2 getFoo2(){

return this.foo2;

}

public static void main(String[] args) {

ChildClass cc = new ChildClass();

cc.setFoo1("徐勤柱");

cc.setFoo2("王昭娴");

System.out.println("get() " + cc.getFoo1());

System.out.println("get() " + cc.getFoo2());

ChildClass cc2 = new ChildClass();

cc2.setFoo1(123);

cc2.setFoo2("吴明静");

System.out.println("get() " + cc2.getFoo1());

System.out.println("get() " + cc2.getFoo2());

ChildClass cc3 = new ChildClass();

cc3.setFoo1("申佳维");

cc3.setFoo2(123.4556);

System.out.println("get() " + cc3.getFoo1());

System.out.println("get() " + cc3.getFoo2());

}

}

三  学习心得:

(1)java 泛型不能够有基本类型

List list=new ArrayList();//这里。这样是错误的

list.add(0);

list.add(1);

这是由于:泛形要求能包容的是对象类型,而基本类型在java里不属于对象。可是基本类型都有其包装类型,也就是对象类型:

int->Integer

long->Long

....

那么你要想存放基本类型就用其包装类型去实现功能:

List list=new ArrayList();

list.add(0);

list.add(1);

总之中的一个句话。泛型里面能够放 ,。int,char 基本类型是不能够的。泛型里面是能够放引用类型的,比方放个对象类型。.

http://docs.oracle.com/javase/tutorial/extra/generics/simple.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值