java 泛型

[b]java 泛型[/b]

1.Java范型时编译时技术,在运行时不包含范型信息,仅仅Class的实例中包含了类型参数的定义信息。
2.泛型是通过java编译器的称为擦除(erasure)的前端处理来实现的。你可以(基本上就是)把它认为是一个从源
码到源码的转换,它把泛型版本转换成非泛型版本。(可以理解为编译器会为你的代码跟据实际的类型帮你生成
了实际类型的接口或变量)


[b]?通配符泛型(可以是任意类型)[/b]
仅能作为接收任意类型(就是只能在参数类型定义时使用,不能作为一个实际的类型来使用)

List<?> unknownList;	//正确
? t;//错(不能这样用)



[b]T自定义泛型[/b]
就是可以定义一个类型
T t;//对
public <T> void write(T t, T[] ta);//对


public static <T> T conversetest(Object obj){
return (T)obj;
}

//应用
Aa aa = converse.conversetest(ob1); //这里conversetest变成的类型为你要转换的类型


Class<T>表示是一个T的类型(相当表得到T实例的Class)
public static <T> T toObj(Class<T> t,String string){
return JsonUtils.parseObject(string,t);
}

//应用
Animal animal2 = toObj(Animal.class,animalString);



[b]定义接口[/b]
public interface Repository<T> {
public List<T> getAllObjects();
public T getObject(String id);
}


public class NatureRepositoryImpl implements Repository<Person> {
public List<Person> getAllObjects() {
return mongoTemplate.findAll(Person.class);
}

public Person getObject(String id) {
return mongoTemplate.findById(new Query(Criteria.where("id").is(id)), Person.class);
}
}



[b]定义带类型参数的类[/b]
public class TestClassDefine<T, S extends T> {
....
}

public class TestClassDefine<T> {
....
}



[b]定义待类型参数方法[/b]
public <T, S extends T> T testGenericMethodDefine(T t, S s){
...
}



[b]泛型限定[/b]
?(或T) extends SomeClass 这种限定,说明的是只能接收SomeClass及其子类类型,所谓的“上限”
?(或T) super SomeClass 这种限定,说明只能接收SomeClass及其父类类型,所谓的“下限”

public <T extends Comparable> shwo(T a, T b)
{
int num = a.compareTo(b);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jie310600

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值