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

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. 独家 | 将时间信息编码用于机器学习模型的三种编码时间信息作为特征的三种方法...
  2. SAP UI5里sap.m.shell的实现
  3. kettle mysql 分页_kettle 分页抽数
  4. 多数公司容易犯的5个大数据错误
  5. 新北洋,知识型员工的科学管理
  6. abap数据类型转换_ABAP 中JSON格式的转换与解析
  7. 1.10 编程基础之简单排序_10 单词排序
  8. Spring bean生命周期概览
  9. 字节跳动推出企业技术服务平台“火山引擎”
  10. 在 Perl 中利用 DOM 和 XPath 对 XML 进行有效处理
  11. 羊毛之家,青龙脚本,几乎全部可用
  12. 【Spring源码三千问】BeanDefinition详解——什么是 RootBeanDefinition?merged bean definition 又是什么鬼?
  13. 5G移动通信发展历程
  14. html做群聊通讯方法,一例完整的websocket实现群聊demo
  15. 项目配置管理CM(Configuration Management)
  16. 复旦大学与国网上海共建“电力大数据实验室”
  17. mybatis中如何防止sql注入和传参
  18. 人工智能的发展对生活有什么影响?
  19. spring boot 项目重新搭建----------mvc配置:拦截器
  20. Zygote启动及其作用

热门文章

  1. 【BZOJ—2957楼房重建】【连载:请在T台上微笑】
  2. Ipv4中的A 、B、C类网络及子网掩码
  3. react-native仿写洛克王国手游版
  4. CentOS6 下安装HP-LaserJet 1020打印机
  5. 世​界​知​名​芯​片​厂​商​及​其​产​品​介​绍
  6. The Path to Learning WR Python FPE.10
  7. 今日更新【深圳大学】初试复试资料分享(附考研群)
  8. CSS — 字体和背景
  9. rap技术原理_有没有什么快速入门rap说唱的方法?
  10. 高精度测距仪 3D打印机 自动调平 应用