class Info<T extends Number>{ // 指定上限,只能是数字类型
private T var ; // 此类型由外部决定
public T getVar(){
return this.var ;
}
public void setVar(T var){
this.var = var ;
}
public String toString(){ // 覆写Object类中的toString()方法
return this.var.toString() ;
}
};
public class GenericsDemo27{
public static void main(String args[]){
Info<Integer> i = fun(30) ;
System.out.println(i.getVar()) ;
}
public static <T extends Number> Info<T> fun(T param){
Info<T> temp = new Info<T>() ; // 根据传入的数据类型实例化Info
temp.setVar(param) ; // 将传递的内容设置到Info对象的var属性之中
return temp ; // 返回实例化对象
}
};
  小弟就是不明白Info<Integer> i = fun(30) ;这句代码怎么感觉怎么别扭,既然是调用fun()方法,为什么可以直接声明info变量,然后将fun(30)直接赋给它。请各位大侠明示啊,谢谢啊!!!

解决方案 »

  1.   

    fun() 方法你没看到是返回一个Info对象么,当然可以直接赋值了
      

  2.   

    public static <T extends Number> Info<T> fun(T param){
    ......
    }
    fun方法返回类型不就是Info<T>
    而<T extends Number> 只在你将T作为参数中的一个类型使用前定义。你必须按此方法声明对象。
      

  3.   

      调用fun()的结果是-->返回一个实例化的对象,且对象的var属性赋值为30.首先,fun(30)中的30传入fun(T param)中,则T的类型就被决定了是Integer类型,然后在fun(T param)方法中开始了对象的实例化,并且调用了setter方法是var属性赋值为30,并且把实例化好的对象返回给i,而i之前就定义为Integer类型了,所以一切OK,但是内存关系图呢?楼上的各位不觉得有些别扭吗?内存关系图怎么表示呢?大概我学的太少了,无法完整明白的表示出来,所以觉得奇怪,你们呢?既然大家都很明白,那么谁给个图呗,谢谢了啦!小弟今天五点睡的十一点就起来了一直晕乎乎的,各位开导一下菜鸟吧,谢谢啊O(∩_∩)O~