Java F-bounded
2015-10-21 15:10
447 查看
Java F-bounded
上次在StackOverflow上面问了一个问题,下面这种模式有什么用处.abstract class Base<T extends Base<T>> { } class Variant<T extends Variant<T>> extends Base<T> { }
我是在另外一个问题上面看到的这样的一段代码,一开始一直都不理解,后面看了那些回答的结果,这个F-bounded类型最贴近我想问的。
想明白F-bounded是什么以及它的用处,我举个例子可能就会很清楚的了。下面是wiki中的一个例子。
class I{ } class A <T extends I>{ public T id(T x){ return x } }
A类型里面的id函数的参数被限制为I的子类的。再看下面这一段代码
abstract class I<T extends I<T>>{ public T clone(T x); } class A extends I<A>{ @Override public A clone(A x){ return x } }
这里面通过I就将clone函数的参数限制为A本身了。这是一个非常好的类型复制方法。它很好地限制了类型的参数。显然I也可以是Java的接口,这是Java模版一个非常巧妙的使用。
回到第一段代码,如果我们有VariantA继承Variant,即
class VariantA extends Variant<VariantA>{ }
那第一段代码就可以正常使用了。它也可以发挥F-bounded代码的效果。对某些函数进行参数限制。有了VariantA后,也可以这样去实例化Variant。
Variant<VariantA> variant = new Varaint<VariantA>();
或者
Variant<VariantA> variant = new VariantA();
这段时间看开源项目的源码收获颇多,见识了很多东西,接下来还需要自己研读,慢慢地好好总结。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统