java泛型-泛型类、接口

java泛型-泛型类、接口

泛型类的语法

Class 类名称<泛型标识, 泛型标识, ...> {
	private 泛型标识 变量名;
.....
}

常用的泛型标识:T E K V

  • 使用语法:

    类名<具体的数据类型> 对象名 = new 类名<>();

代码示例

/**
 *   泛型类定义
 * @param <T> 泛型标识-参数类型
 * 			  T 创建对象的时候指定其具体的数据类型
 */
public class ProductGetter<T> {

	Random random = new Random();
	
	private T product;
	
	List<T> list = new ArrayList<>();
	
	public void addProduct(T t) {
		list.add(t);
	}
	
	public T getProduct() {
		product = list.get(random.nextInt(list.size()));
		return product;
	}
}

public class MainClass {
	
	public static void main(String[] args) {
		ProductGetter<String> productGetter = new ProductGetter<>();
		productGetter.addProduct("iphone12");
		productGetter.addProduct("");
		productGetter.addProduct("扫地机器人");
		productGetter.addProduct("咖啡机");
		productGetter.addProduct("");
		productGetter.addProduct("");
		productGetter.addProduct("");
		
		String product = productGetter.getProduct();
		System.out.println(product);
	}
}

泛型类的注意事项

  1. 泛型类,如果没有指定具体的数据类型,此时,操作类型是Object
  2. 泛型的类型参数只能是类类型,不能是基本数据类型
  3. 泛型类型在逻辑上可以看成是多个不同的类型,但实际上都是相同的类型

泛型类派生子类

子类也是泛型类,子类和父类的泛型类型要一致

	Class ChildGeneric<T> extends Generic<T>

 子类不是泛型类,父类要明确泛型的数据类型,否则默认为Object

	Class ChildGeneric extends Generic<String>

代码示例

/**
 * 泛型父类
 * @param <E>
 */
public class Parent<E> {

	private E value;

	public E getValue() {
		return value;
	}

	public void setValue(E value) {
		this.value = value;
	}
	
}

/**
  *  泛型类派生子类,如果子类也是泛型那么子类的泛型标识要和父类一致
 * @author Administrator
 * @param <T>
 */
public class ChildFirst<T, E> extends Parent<T> {

}

/**
 * 泛型类派生子类,如果子类不是泛型类,父类要明确泛型类型,否则默认为Object
 * @author Administrator
 * @param <T>
 */
public class ChildSecond extends Parent<String> {

}

泛型接口的定义语法

interface 接口名称 <泛型标识, 泛型标识, ...> {
	泛型标识 方法名();
......
}

泛型接口的使用

实现类不是泛型类,接口要明确数据类型
	class Pear2 implements Generator<String>
实现类也是泛型类,实现类和接口的泛型类型要一致
	class Pear<T, E> implements Generator<T>

代码示例

/**
 *   泛型接口
 *
 * @param <T>
 */
public interface Generator<T> {
	
	T getKey();
}

/**
 *实现类不加泛型,默认Object 
 */
public class Apple implements Generator {

	@Override
	public Object getKey() {
		return null;
	}

}

/**
 * 实现类指定泛型与服了相同
 */
class Pear<T, E> implements Generator<T> {

	private E value;
	
	@Override
	public T getKey() {
		return null;
	}
	
}

/**
 * 实现类指定泛型类型
 */
class Pear2 implements Generator<String> {

	@Override
	public String getKey() {
		return null;
	}
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值