限制泛型可用类型
在定义泛型类别时,默认在实例化泛型类的时候可以使用任何类型,但是如果想要 限制使用泛型类型时,只能用某个特定类型或者是其子类型才能实例化该类型时,可以在定义类型时,使用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();
}
}
在Java中,定义泛型类时可以使用`extends`关键字来限制泛型参数的类型,确保只能用指定类的子类或实现特定接口的类进行实例化。例如,`classCls1<TextendsString>`限制了T必须是String或其子类,而`classCls1<TextendsAnimal>`则要求T是Animal类或其子类。同样,可以限制为实现特定接口的类,如`classCls1<TextendsMove>`。
2445

被折叠的 条评论
为什么被折叠?



