A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邵天强 中级黑马   /  2012-11-15 10:14  /  1445 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邵天强 于 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){
  
}
}
定义在类上的泛型与定义在方法上的泛型有什么区别呢,我知道定义在类上,整个类中有效,定义在方法上,只在此方法有效,但是用时,不知道怎么用

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

倒序浏览
语法就是这样的,就跟int虚拟机能够识别一样 你要是随便找个位置乱写的话就无法识别了
不同的地方进行定义肯定是有不同的需要呗
看要实现的功能来定了
回复 使用道具 举报
泛型不但可以在类上使用,也可以在方法的返回值上、参数上、数组上使用泛型:


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

//泛型类
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;
        }
}

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马