首页 > 其他 > 详细

泛型方法与类型推断

时间:2014-07-16 20:39:16      阅读:369      评论:0      收藏:0      [点我收藏+]

一。好处

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.Integer
java.lang.Float
GenericMethods

 

三。泛型与反射

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.Arrays

public 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";
    }
}

 

泛型方法与类型推断,布布扣,bubuko.com

泛型方法与类型推断

原文:http://www.cnblogs.com/yuyutianxia/p/3836623.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!