MyBatis框架迭代器模式实现原理解析
作者:我太难了008 发布时间:2021-08-07 13:56:00
标签:MyBatis,框架,迭代器,模式
迭代器模式,一直没用过,也不会用。恰巧MyBatis框架中也使用到了迭代器模式,而且看起来还比较简单,在以后的工作中,若有需要咱们可模仿它的套路来干。
直接上代码
import java.util.Iterator;
/**
* @author Clinton Begin
*/
public class PropertyTokenizer implements Iterator<PropertyTokenizer> {
private String name;
private final String indexedName;
private String index;
private final String children; // 通过这个children属性建立前后两次迭代的关系
public PropertyTokenizer(String fullname) {
int delim = fullname.indexOf('.');
if (delim > -1) {
name = fullname.substring(0, delim);
children = fullname.substring(delim + 1);
} else {
name = fullname;
children = null;
}
indexedName = name;
delim = name.indexOf('[');
if (delim > -1) {
index = name.substring(delim + 1, name.length() - 1);
name = name.substring(0, delim);
}
}
public String getName() {
return name;
}
public String getIndex() {
return index;
}
public String getIndexedName() {
return indexedName;
}
public String getChildren() {
return children;
}
@Override
public boolean hasNext() {
return children != null;
}
@Override
public PropertyTokenizer next() {
return new PropertyTokenizer(children);
}
@Override
public void remove() {
throw new UnsupportedOperationException("Remove is not supported, as it has no meaning in the context of properties.");
}
}
实现 Iterator 接口就很方便的弄出一个迭代器,然后就可以使用hasNext和next方法了。
业务逻辑咱们不用管,只需要知道在调用next方法时,new了一个 PropertyTokenizer 实例, 而这个实例有个 children属性, hasNext方法就是通过判断这个children属性是否为空来作为结束迭代的判断条件。
具体的实现的我们不管,只需要领悟两点: 1. next需要干啥; 2. hasNext的如何判断?
来源:https://www.cnblogs.com/z-qinfeng/p/12216021.html


猜你喜欢
- 循环语句就是让计算机根据条件做循环计算,在条件满足时继续循环,条件不满足时退出循环。Java提供了while条件循环。它的基本用法是:whi
- 首先对于一个SpringBoot工程来说,最明显的标志的就是 @SpringBootApplication它标记了这是一个SpringBoo
- 1.介绍有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本。而Runtime.getRuntime().exec(
- Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。本篇不涉及其原理,只用代码构建项目简单试用一下其回滚
- 一、为何使用内部类内部类提供了更好的封装,只有外部类能访问内部类内部类可以独立继承一个接口,不受外部类是否继承接口影响内部类中的属性和方法即
- 1.1、定义从现有类派生的类被称作子类,也叫派生类,扩展类,或孩子类。现有类被称作超类,也叫基类,或父类。1.2、创建子类public cl
- 本文实例为大家分享了java实现航空用户管理系统的具体代码,供大家参考,具体内容如下题目内容:某航空公司在其航班到达的不同的国家的不同地方设
- 目录Static基本规则:1. static方法2. static变量3. static代码块4. static内部类5. static静态
- 时间轴主要使用Recyclerview来实现。开发语言使用Kotlin,代码相对java少了许多也简洁许多源代码下载地址效果图:MainAc
- 大家都知道使用java反射可以在运行时动态改变对象的行为,甚至是private final的成员变量,但并不是所有情况下,都可以修改成员变量
- 需求:假设我们的APP有3个页面AActivity,BActivity,CActivity,我们的APP需要一直运行在前台(特殊设备),要求
- 一.瀑布模型瀑布模型严格遵循软件生命周期各阶段的固定顺序:计划、分析、设计、编程、训试和维护,上一阶段完成后才能进入到下一阶段, 整个模型就
- 介绍Tuple是异类对象的有序序列。 我们经常可以写出返回多个值的方法,所以我们需要创建一个包含多个数据元素的简单结构。 为了支持这些情况,
- Java 执行 JS 脚本工具用途:为了便于系统扩展,提供了 JS 脚本的功能,可以通过在系统中执行脚本来获得更复杂的功能。例如:系统提供了
- 上一篇,初步开发了这个应用,功能都有了(见https://www.jb51.net/article/96992.htm 点击打开链接)。但是
- 在网上很多关于dubbo异常统一处理的博文,90%都是抄来抄去。大多都是先上一段dubbo中对于异常的统一处理的原码,然后说一堆的(甚至有1
- 首先需要清楚一个概念:函数式接口;它指的是有且只有一个未实现的方法的接口,一般通过FunctionalInterface这个注解来表明某个接
- Collection 接口 :Collection是最基本的集合接口,声明了适用于JAVA集合(只包括Set和List)的通用方法。Set和
- 用了多年的Visual Studio,今天才发现这个编码技巧,真是惭愧,分享出来,算是抛砖引玉吧!开发环境: vs2010+C#1、代码重构
- 一、数组(Array)数组具有以下的特点:数组属于线性结构,在内存中是连续存放的。数组的元素类型必须相同。数组可以直接通过下标访问。数组的查