Java泛型(java Generic )

如果你的E文还OK的话,可以直接略过本文,直接参考SUN 官方文档,链接如下:

http://java.sun.com/docs/books/tutorial/java/generics/gentypes.html

(CSND的Blog可能出问题了,下面格式看了很难受,没办法!)

直接给出一个泛型的简单范例

/**

 * Box 类的泛型版本
*一个可以放任何对象的Box类,里面只有两个简单的存取方法!
 */

public class Box<T> {



    private T t; // T 表示 Type(类型)          



    public void add(T t) {

        this.t = t;

    }



    public T get() {

        return t;

    }

}
下面是使用它的代码
public class BoxDemo3 {



    public static void main(String[] args) {

        Box<Integer> integerBox = new Box<Integer>();

        integerBox.add(new Integer(10));

        Integer someInteger = integerBox.get(); // no cast!

        System.out.println(someInteger);

    }

}
-----------------------------------无聊的分割线--------------------------------------
  泛型很类似C++中的模板的概念(但据说没有那么强大),或者你可以把它看成一种特殊的类型变量,它的值是你传进去的 类型 !这些类型
可以是任何 类 类型,接口类型,甚至是其他类型变量!上面的那个T也叫formal type parameter(形式类型参数,
形参的类型版本)
  在没有泛型的日子里,上面的代码是这样写的:
   public class Box {



        private Object object;



        public void add(Object object) {

            this.object = object;

        }



        public Object get() {

            return object;

        }

    }

public class BoxDemo1 {



    public static void main(String[] args) {



        // ONLY place Integer objects into this box!
	//你只能通过注释来告知只能把Integer放入box对象里

        Box integerBox = new Box();



        integerBox.add(new Integer(10));

        Integer someInteger = (Integer)integerBox.get();

        System.out.println(someInteger);

    }

}
传统做法的弊端是,如果你放入的不是integerBox.add(new Integer(10))的那个10,放入一个字符串,
这个错误只有在运行时才能监测出来(大项目中的调式将非常壮观!),而利用泛型在编译时期就可以监测出来!
 
时间有限,先写到这里,官网有详细资料!

第二次补充:泛型方法

<body>

<%! 

public class Box<T> {



    private T t;          



    public void add(T t) {

        this.t = t;

    }



    public T get() {

        return t;

    }

//下面这个是泛型方法的声明和实现

    public <U> void inspect(U u){

       System.out.println("T: " + t.getClass().getName());

        System.out.println("U: " + u.getClass().getName());

    }

}

%>



<%

  Box<Integer> integerBox = new Box<Integer>();

        integerBox.add(new Integer(10));

        //下面是调用一个泛型方法

        integerBox.<String>inspect("some text");

%>

</body>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值