首页 > 代码库 > 泛型方法与类型推断
泛型方法与类型推断
一。好处
1.代替整个类泛型化
2.static方法无法访问泛型类的类型参数,所以static方法需要使用泛型能力,就必须使其成为泛型方法。
二。示例
只需将泛型参数列表置于返回值之前。
public class GenericMethods { public void f(T x) { System.out.println(x.getClass().getName()); } public static void main(String[] args) { GenericMethods gm = new GenericMethods(); gm.f(""); gm.f(1); gm.f(1.0F); gm.f(gm); }}
结果:好像f()方法被无限重载过一样。
java.lang.String java.lang.Integerjava.lang.FloatGenericMethods
三。泛型与反射
public <T> T getInstance(Class<T> clazz) throws InstantiationException, IllegalAccessException{ return clazz.newInstance(); }
调用示例
getInstance(Class.forName("com.gl.User"));
forName
public static Class<?> forName(String className) throws ClassNotFoundException
四。API示例
java.util.Arrayspublic static <T> List<T> asList(T... a)
1.用法
1 // List<Shape> shapes = Arrays.asList(new Rect(),new Square());//编译期出错。 数组与泛型容器的区别:数组有协变类型,而泛型容器没有内建协变类型2 List<Rect> rects = Arrays.asList(new Rect(),new Square());3 List<Shape> rects1 = Arrays.<Shape>asList(new Rect(),new Square()); //显示类型参数说明4 5 List<Rect> rects2 = new ArrayList<Rect>();6 Collections.addAll(rects2, new Rect(),new Square());
类继承
class Shape{ void draw(){ System.out.println(this+".draw()"); }}class Circle extends Shape{ @Override public String toString() { return "Circle"; }}class Rect extends Shape{ @Override public String toString() { return "Rect"; }}class Triangle extends Shape{ @Override public String toString() { return "Triangle"; }}class Square extends Rect{ @Override public String toString() { return "Square"; }}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。