java 泛型 加_java 泛型的使用

泛型类

在类声明时通过一个标识符表示类中某个字段的类型或者某个方法的返回值或参数的类型,这样在类声明或实例化的时候只要指定自己需要的类型就ok。

声明带泛型的类:

class类名{

泛型类型变量名;

泛型类型方法名(){}

返回值类型方法名(泛型类型变量名){}

}

使用带泛型的类:

类名对象名 = new类名();

类型参数规范:推荐使用规范-常见的泛型,泛型只保存在源文件中,class文件中不存在;也就是说在编译阶段就会丢失,基本数据类型不能作为泛型类型;

K键,比如映射的键  key的类型

V值,比如Map的值 value类型

E元素,比如Set  Element表示元素,元素的类型

T泛型,Type的意思

我的总结:泛型好处:限定添加类型和消除强转转换的麻烦!

泛型使用

public class Point {  //声明任意符号的标识符

private Q x;  //变量类型由外部组成

private Q y;

public Q getX() {

return x;

}

public void setX(Q x) {  //类型由外部决定

this.x = x;

}

//..........................

}

.................main.........

{

Point p = new Point(); //定义具体类型

p.setX(1.1);

p.setY(2.2);

}

练习例子

需求:设计一个表示点的类Point,该类有两个字段,一个是横坐标x,一个纵坐标y,要求坐标有3种表达形式(Integer,Double,String):

如果不使用泛型的话可以新建多个类,但是内部方法体只有参数类型不一样,所以用泛型的话更加简单,给定一个占位符,并不明确表示到底是什么类型,在实际运用的时候才确定类型!!

很好的例子!

package generic;

class Point{

privateTt1;

privateTt2;

public T getT1() {

return t1;

}

public void setT1(T t1) {

this.t1 = t1;

}

public T getT2() {

return t2;

}

public void setT2(T t2) {

this.t2 = t2;

}

}

public class GenericDemo {

public static void main(String[] args) {

//String 类型的

Point p = new Point();

p.setT1("2");

p.setT2("3");

System.out.println(p.getT1());

System.out.println(p.getT2());

//Integer 类型的

Point p2 = new Point();

p2.setT1(23);

p2.setT2(24);

System.out.println(p2.getT1());

System.out.println(p2.getT2());

//Double 类型的

Point p3 = new Point();

p3.setT1(23.00);

p3.setT2(24.00);

System.out.println(p3.getT1());

System.out.println(p3.getT2());

//============================

Set s = new HashSet();//创建一个容器对象,应该在创建的时候就明确是装什么的

s.add("a");

//s.add(1);//此时就加不进去了,因为已经限制了容器内参数类型!

//此时就能保证集合里元素类型一致,

Set treeSet = new  TreeSet();

//规定key只能是String,value是Date

Map map = new HashMap();

// V put(K key, V value)

Date v = map.put("", new Date());//和上面定义的类型一样

//V get(Object key)

Date val = map.get("");

}

}

运行结果

2

3

23

24

23.0

24.0

这样的话借助泛型一个类就可以表达多个不同类型的参数!

要求

消除强制类型的转换,如,使用Comparable比较时每次都需要类型强转;

1、没有加上泛型,最初的需要强制类型转换

package generic;

import java.util.Set;

import java.util.TreeSet;

class Person implements Comparable{//需要进行排序的类要实现Comparable

private Integer age;

public Person(Integer age) {

super();

this.age = age;

}

@Override

public int compareTo(Object o) {

Person p = (Person)o;//强制类型转换

return this.age.compareTo(p.age);

}

public String toString(){

return this.age.toString();

}

}

public class GenericDemo2 {

public static void main(String[] args) {

Set set = new TreeSet();

set.add(new Person(15));

set.add(new Person(12));

set.add(new Person(19));

set.add(new Person(53));

set.add(new Person(62));

System.out.println(set);

}

}

第二步:加上泛型,不再需要强转(因为类型已经固定了)!

package generic;

import java.util.Set;

import java.util.TreeSet;

class Person implements Comparable{//

private Integer age;

public Person(Integer age) {

super();

this.age = age;

}

@Override

public int compareTo(Person o) {

return this.age.compareTo(o.age);//按照什么排序

}

public String toString(){

return this.age.toString();

}

}

public class GenericDemo2 {

public static void main(String[] args) {

Set set = new TreeSet();

set.add(new Person(15));

set.add(new Person(12));

set.add(new Person(19));

set.add(new Person(53));

set.add(new Person(62));

System.out.println(set);

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值