定义一些类,这些类之间有父子关系,如下:

class Father{}
class Son1 extends Father{}
class Son2 extends Father{}class Top{}
class Middle extends Top{}
class Bottom extends Middle{}

1、incl()方法

源代码如下:

/** Add type set to given type list, unless*  it is a subclass of some class  in the list.*/
public List<Type> incl(Type t, List<Type> ts) {List<Type> result;// 如果t是ts列表中一些类的子类,则返回这个tsif(subset(t,ts)){result = ts;}else{// 如果ts列表中有些类是t的子类,则从ts列表中移除这些子类,// 然后追加t后将这个ts列表返回List<Type> temp = excl(t, ts);result = temp.prepend(t);}return result;
}

  

2、excl()方法  

源代码如下:

/** Remove type set from type set list.*/
// 如果ts列表中有些类是t的子类,则从ts列表中移除这些子类后返回,
// 如果ts列表为空,表示没有可移除的或者说已经全部被移除完了,
// 直接返回ts空列表
public List<Type> excl(Type t, List<Type> ts) {if (ts.isEmpty()) {return ts;} else {// 需要清楚知道List<Type>这个类型的实现机制List<Type> ts1 = excl(t, ts.tail); // 递归// 当ts.head是t的子类时,移除这个ts.head,返回ts.tail// 处理后的结果if (types.isSubtypeCapture(ts.head, t)) {return ts1;}// 当ts.head没有成为t的子类时,则列表中不需要移除// 这个ts.head,直接返回tselse if (ts1 == ts.tail) {return ts;}// 当ts.head没有成为t的子类时且ts.tail处理结果也有变动,// 则追加ts.head到ts1后返回else {return ts1.prepend(ts.head);}}
}

  

3、并集union()方法

源代码如下:

/** Form the union of two type set lists.*/
public List<Type> union(List<Type> ts1, List<Type> ts2) {List<Type> ts = ts1;for (List<Type> l = ts2; l.nonEmpty(); l = l.tail) {ts = incl(l.head, ts);}return ts;
}

  

4、差集diff()方法

源代码如下:

/** Form the difference of two type lists.*/
// 如果ts1列表有些类是ts2列表中某些类的子类,则从ts1
// 列表中移除这些子类,最后返回ts1中剩余的类
public List<Type> diff(List<Type> ts1, List<Type> ts2) {List<Type> ts = ts1;for (List<Type> l = ts2; l.nonEmpty(); l = l.tail) {ts = excl(l.head, ts);}return ts;
}

  

5、交集intersect()方法

可能可以这样理解:找ts1与ts2中共同抛出的异常,那么对Father与Son1、Son2来说,可能抛出的共同异常就是Son1和Son2

对于Middle与Top、Bottom来说,

源代码如下:

/** Form the intersection of two type lists.*/
// 如果有ts1列表中含有Father类型,而ts2中含有Father的
// 子类Sub1,Sub2 时,最终返回Sub1,Sub2,表示这个
// Father类型能够catch那两个子类型
public List<Type> intersect(List<Type> ts1, List<Type> ts2) { // todoList<Type> ts = List.nil();for (List<Type> l = ts1; l.nonEmpty(); l = l.tail) {if (subset(l.head, ts2)) {ts = incl(l.head, ts);}}for (List<Type> l = ts2; l.nonEmpty(); l = l.tail) {if (subset(l.head, ts1)) {ts = incl(l.head, ts);}}return ts;
}

  

转载于:https://www.cnblogs.com/extjs4/p/9452798.html

Check类中的incl、union,excl,diff,intersect相关推荐

  1. oracle中 unino,union all,minus,intersect的用法

    1.准备测试数据 准备测试表:test_minus_tbl create table test_minus_tbl(id varchar2(20),name varchar2(50),age int ...

  2. Sql中的并(UNION)、交(INTERSECT)、差(minus)、除去(EXCEPT)详解

    限制条件 (1)所有查询中的列数和列的顺序必须相同. (2)比较的两个查询结果集中的列数据类型可以不同但必须兼容. (3)比较的两个查询结果集中不能包含不可比较的数据类型(xml.text.ntext ...

  3. commons-math3-3.6.1-org.apache.commons.math3.analysis.integration-包下的类-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.integration-包下的类-中英对照文档及源码赏析 摘要:中英对照文档.源码赏析.or ...

  4. python类的属性和对象属性_在python的类中动态添加属性与生成对象

    本文将通过一下几个方面来一一进行解决 1.程序的主要功能 2.实现过程 3.类的定义 4.用生成器generator动态更新每个对象并返回对象 5.使用strip 去除不必要的字符 6.rematch ...

  5. java sql范围查询语句,java类中写sql语句,查询条件包含换行

    java类中写sql语句,查询条件包含换行 detachedCriteria.add(Restrictions.or( Restrictions.like("chengBanDanWeiId ...

  6. Tomcat是如何将请求一步步传递到我们编写的HttpServlet类中的

    我们平常编写好的HttpServlet类后,就可以处理请求了,但是服务器在接收到请求信息以后是如何将这些请求传递到我们编写的Servlet类中的???这个疑问在我心中的已经很久了,现在要来解决它. 我 ...

  7. python中类的定义_python 类中定义类

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 现有自定义类(color.py)如下,类位于路径'userschuxingpyt ...

  8. 关于使用Swagger-ui时文档显示实体类中隐藏部分字段的问题

    关于使用Swagger-ui时文档显示实体类中隐藏部分字段的问题 所遇到的问题: 在swagger-ui测试页面测试接口时,由于在实体类中添加部分临时的实体类导致测试文档过于冗杂 如图: 解决: po ...

  9. commons-math3-3.6.1-org.apache.commons.math3.analysis.integration.gauss-包下的类-中英对照文档及源码赏析

    commons-math3-3.6.1-org.apache.commons.math3.analysis.integration.gauss-包下的类-中英对照文档及源码赏析 摘要:中英对照文档.源 ...

最新文章

  1. 虚拟机安装CentOS以及SecureCRT设置【完美无错版】
  2. oracle 字符集 自造字,循序渐进Oracle:自定义字符集的使用、更改字符集的内部方式及字符集更改的案例...
  3. h5列表页的性能优化
  4. session already invalidate
  5. empire-web可视化
  6. c++ memset 语言_C++中memset函数用法详解
  7. all()与any()
  8. resteasy_RESTEasy教程第1部分:基础
  9. 【数据结构与算法-java实现】三 Java数组类实现
  10. 2017.9.2 最大半联通子图 思考记录
  11. java 中super_Java中的super
  12. 【正点原子FPGA连载】第三十二章 MDIO接口读写测试实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  13. 将java或javaweb项目打包为jar包或war包
  14. ios保存gif到相册_iOS如何保存下载GIF图片
  15. js 关键技术集合
  16. jeecg-boot 隐藏菜单操作步骤
  17. 中止执行后超过2年_执行中止。债权人是否两年内都要申请执行一次。如果中止执行两年内不申请执行,是否都再也执行不了...
  18. 基于ERP系统的仓储管理系统?
  19. 全视野数字切片(whole slide images, WSIs)的预处理
  20. edp和edt哪个好_香水等级科普 | EDP和EDT你都分清楚了吗?

热门文章

  1. 《伤寒论》——辨太阳病脉证并治(下)51条
  2. anaconda打开python文本编辑器_Python开发环境安装(Anaconda+PyCharm)
  3. 用dos命令破除unix管理员口令
  4. SQL语句distinct的多个字段去重问题
  5. 初一计算机游戏,沉迷于电脑游戏初一作文
  6. 移动NB-IoT卡设置ATU和Active Time缓解无法访问服务器问题
  7. 程序员幸福感拉满:一键为代码自动生成注释的工具,拿走不谢!
  8. [人月神话]读书笔记9--再论没有银弹(No Silver Bullet Refired)
  9. 继承与派生(Part Ⅲ)——多重继承 虚基类
  10. 面向星际争霸:DeepMind 提出多智能体强化学习新方法