Java中的泛型到底怎么使用?

泛型

  • 泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数;
  • 可以声明泛型类、泛型方法和泛型接口(下一章介绍接口)。
  • 下面通过例题演示一下泛型类和泛型方法。

例:泛型类

class GeneralType <Type> {
	Type object;
	public GeneralType(Type object) {
	this.object = object;
}
public Type getObj() {
	return object;
	}
}
public class Test {
	public static void main(String args[]){
		GeneralType<Integer> i = new GeneralType<Integer>(2);
		GeneralType<Double> d = new GeneralType<Double> (0.33);
		System.out.println("i.object=" + (Integer)i.getObj());
		System.out.println(“i.object=+ (Integer)d.getObj()); // 编译错误
	}
}

例:泛型方法

class GeneralMethod {
	<Type> void printClassName(Type object) {
	System.out.println(object.getClass().getName());
	}
}
public class Test {
	public static void main(String[] args) {
		GeneralMethod gm = new GeneralMethod();
		gm.printClassName("hello");
		gm.printClassName(3);
		gm.printClassName(3.0f);
		gm.printClassName(3.0);
	}
}

通配符泛型

  • 使用通配符可以使程序更为通用
class GeneralType <Type> {
    Type object;
    public GeneralType(Type object) {
	 this.object = object;
}
public Type getObj() {
	return object;
	}
}
class ShowType {
	public void show (GeneralType<?> o) {
		System.out.println(o.getObj().getClass().getName());
	}
}

程序的运行结果如下:

java.lang.Integer
java.lang.String

有限制的泛型

  • 虽然可以使用泛型使程序能够处理多种不同类型对象,并不是所有
    对象都能进行某些操作;

  • 有时候需要将泛型中参数代表的类型做限制,此时就可以使用有限
    制的泛型。

  • 在参数“Type”后面使用“extends”关键字并加上类名或接口名,
    表明参数所代表的类型必须是该类的子类或者实现了该接口

    • 注意,对于实现了某接口的有限制泛型,也是使用extends关键字,而
      不是implements关键字
  • 举个例子

    class GeneralType <Type extends Number> {
    	Type object;
    	public GeneralType(Type object) {
    	this.object = object;
    	}
    public Type getObj() {
    	return object;
    	}
    }
    public class Test {
    	public static void main(String args[]){
    		GeneralType<Integer> i = new GeneralType<Integer> (2);
    		//GeneralType<String> s = new GeneralType<String> ("hello");
    		//非法,T只能是Number或Number的子类
    	}
    }
    
发布了9 篇原创文章 · 获赞 4 · 访问量 263

猜你喜欢

转载自blog.csdn.net/weixin_43414889/article/details/105660705