限制泛型可用类型
在定义泛型类别时,默认在实例化泛型类的时候可以使用任何类型,但是如果想要 限制使用泛型类型时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用extends关键字指定这个类型必须是继承某个类,或者实现某个接口 。
当没有指定泛型继承的类型或接口时,默认使用extends Objext,所以默认情况下任何类型都可以做为参数传入
具体代码如下
限制类型
class Cls1<T extends String>{ //限制类型
T a;
public Cls1(T a){
this.a = a;
}
public T getData(){
return a;
}
}
public class Test {
public static void main(String[] args) {
Cls1<String> c = new Cls1<String>("deng"); //只能是String类型
c.getData();
}
}
限制类
class Animal{
}
class Dog extends Animal{
}
class Cls1<T extends Animal>{
T a;
public Cls1(T a){
this.a = a;
}
public T getData(){
return a;
}
}
public class Test {
public static void main(String[] args) {
Cls1<Dog> c = new Cls1<Dog>(new Dog());
c.getData();
}
}
限制接口
interface Move{
abstract void test();
}
class A implements Move{
public void test() {
// TODO Auto-generated method stub
}
}
class Cls1<T extends Move>{ //这里是extends不能使用implements
T a;
public Cls1(T a){
this.a = a;
}
public T getData(){
return a;
}
}
public class Test {
public static void main(String[] args) {
Cls1<A> c = new Cls1<A>(new A());
c.getData();
}
}