泛型中的自限定类型

自限定类型强制泛型当做其自己的边界参数来使用。

package a;

/**
 * Created by msc on 2017/1/15.
 */
class SelfBounded<T extends SelfBounded<T>>{
    T element;
    SelfBounded<T> set(T arg){
        element=arg;
        return this;
    }
    T get(){return element;}
}

class A extends SelfBounded<A>{}
class B extends SelfBounded<A>{}
class C extends SelfBounded<C>{
    C setAndGet(C arg){
        set(arg);
        return get();
    }
}
class D{}

//因为类D没有继承SelfBounded,所以该类编译失败。
//class E extends SelfBounded<D>{}

class SelfBounding {
    public static void main(String[] args) {
        A a=new A();
        a.set(new A());
        a=a.set(new A()).get();
        a=a.get();
        C c=new C();
        c=c.setAndGet(new C());
    }
}

自限定所做的就是要求在继承关系中,强制要求将正在定义的类当做参数传递给基类。

自限定参数据有何意义呢?它可以保证类型参数必须与正在被定义的类相同,还可以使用另一个继承了SelfBounded的子类作为参数。但是让参数与正在被定义的类相同是主要用法。



评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值