黑马程序员技术交流社区

标题: 自定义泛型的问题 [打印本页]

作者: 邵天强    时间: 2012-11-15 10:14
标题: 自定义泛型的问题
本帖最后由 邵天强 于 2012-11-15 16:25 编辑

class Demo<T>{
public void show(T t){
  System.out.println("show"+t);
}
}
对于自定义泛型,在类上不定义T,就会报错,那么定义T正确,这个我知道,关键它的原理怎样,为什么定义<T>它就可以识别呢?
再者:泛型又可以定义的方法上
class Demo{
public<T> void show(T t){
  System.out.println("show"+t);
}
public<Q>void show1(Q q){
  
}
}
定义在类上的泛型与定义在方法上的泛型有什么区别呢,我知道定义在类上,整个类中有效,定义在方法上,只在此方法有效,但是用时,不知道怎么用

作者: jerry2627    时间: 2012-11-15 10:30
语法就是这样的,就跟int虚拟机能够识别一样 你要是随便找个位置乱写的话就无法识别了
不同的地方进行定义肯定是有不同的需要呗
看要实现的功能来定了
作者: 李亚飞    时间: 2012-11-15 14:32
泛型不但可以在类上使用,也可以在方法的返回值上、参数上、数组上使用泛型:


/*
* 泛型:解决数据类型的安全性
*/

//泛型类
class DemoTest<T> {
        private T t;

        public T getT() {
                return this.t;
        }

        public void setT(T t) {
                this.t = t;
        }
        public DemoTest(T t)
        {
                this.setT(t);
        }
        public void toSting() {
                System.out.println(this.t);
        }
}

public class Demo6 {
        public static void main(String[] args) {
                DemoTest<Integer> d1 = new DemoTest<Integer>(55);
                DemoTest<Integer> d2 = new DemoTest<Integer>(77);
               
                //调用泛型方法  泛型参数为:DemoTest类
                add(d1, d2);
               
                //调用返回数组的泛型方法
                Integer[] is = args1(2,5,8,9);
                for (int i : is) {
                        System.out.print(i + "\t");
                }

        }

        // 泛型方法 泛型参数 指定为DemoTest类
        public static <T> void add(DemoTest<T> d1, DemoTest<T> d2) {
                System.out.println(d1.getT() + "  " + d2.getT());
        }

        // 泛型方法返回数组
        public static <T> T[] args1(T... ts) {
                return ts;
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2