开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
Computer Science

Java Optional 初始为空

如果你想对 Optional 进行初始化的话,你可能会考虑使用下面的代码: Optional<QualificationStateLabelInfo> stateSpecificLabel = null; 上面的代码编译和运行都没有问题。 如何初始化 正确的初始化代码是: Optional<QualificationStateLabelInfo> stateSpecificLabel = Optional.empty(); 上面将会把你定义的 Optional 初始化为空。     但是我们会避免使用 null。 https://www.ossez.com/t/java-optional/13975

2022年08月03日 0Comments 500Browse 0Like Read more
Computer Science

Java 8 开始新增的 Optional 类 - Optional 对象中的返回

使用 get() 来返回一个值 在对 Optional 对象完成一些检查和校验后,我们可以使用 get() 方法来返回对象中的值。 // returning Value With get() @Test public void givenOptional_whenGetsValue_thenCorrect() { Optional<String> opt = Optional.of("HoneyMoose"); String name = opt.get(); assertEquals("HoneyMoose", name); } 与 orElse() 或者 orElseGet() 方法不一样的地方是 get() 只会在 Optional 包装的对象不为 null 的时候返回值,否则这个方法将会抛出一个没有这个元素(no such element exception)的异常 。 @Test(expected = NoSuchElementException.class) public void givenOptionalWithNull_whenGetThrowsException_thenCorrect() { Optional<String> opt = Optional.ofNullable(null); String name = opt.get(); } 上面的方法显示了如何使用 get() 方法来获得 Optional 中元素的典型操作。 我们使用 Optional 的主要原因就是为了避免在程序中出现 Null 对象异常的这种情况,但是 get() 方法的这种操作还是会给你带来空对象异常的。 因此需要注意下这种代码编写方式,也有可能在 JDK 的后续版本中,这个 get() 方法有可能被取消掉,但是目前还不会。   正是因为这种情况,get() 这个方法也有可能出现空对象异常,在编码的时候还是需要注意下的。 使用 filter() 来进行条件返回 我们可以使用 filter() 方法在输出之前进行测试,然后过滤出满足我们条件的返回对象。 这个方法将会使用 Java 提供的谓语(predicate )作为参数来返回 Optional 对象。 如果通过了 Java 提供的谓语(predicate )测试的话,Optional 对象将会被原样返回。 如果,测试的 谓语(predicate )为 False 的话,那么一个空的 Optional 对象将会被返回。 @Test public void whenOptionalFilterWorks_thenCorrect() { Integer year = 2016; Optional<Integer> yearOptional = Optional.of(year); boolean is2016 = yearOptional.filter(y -> y == 2016).isPresent(); assertTrue(is2016); boolean is2017 = yearOptional.filter(y -> y == 2017).isPresent(); assertFalse(is2017); } filter() 方法通常用来处理你不需要的返回,或者处理满足你条件的返回。 例如在对用户电子邮件进行检查,或者用户密码进行检查的时候,我们可以设置这样一个 filter() 过滤器,当不满足我们设置条件的时候,我们让程序返回一个空的对象,以此来设置条件。 让我们看另外一个使用场景,我们希望购买一个调制解调器(modem),但是我们只关注的是价格,我们对信号灯并不敏感 我们希望对调制解调器在满足价格区间的时候获得一个通知: public class Modem { private Double price; public Modem(Double price) { this.price = price; } // standard getters and setters } 让我们让这个对象通过一些代码来检查这个对象是不是满足我们设定的价格区间. 下面的代码是我们不使用 Optional 的时候的代码。 从上面的代码来看,我们需要进行 Null 检查,然后获得价格,然后判断价格,更要命的更极端的情况价格也有可能为 null。 public boolean priceIsInRange1(Modem modem) { boolean isInRange = false; if (modem != null && modem.getPrice() != null && (modem.getPrice() >= 10 && modem.getPrice() <= 15)) { isInRange = true; } return isInRange; } 为了满足 Null 检查的所有条件,我们需要不停的 if 进行判断。我们需要通过这些 if 条件检查来确定是否满足我们的条件,并且这个代码看起来有点郁闷,但是实际上也确实就是这样写的。 @Test public void whenFiltersWithoutOptional_thenCorrect() { assertTrue(priceIsInRange1(new Modem(10.0))); assertFalse(priceIsInRange1(new Modem(9.9))); assertFalse(priceIsInRange1(new Modem(null))); assertFalse(priceIsInRange1(new Modem(15.5))); assertFalse(priceIsInRange1(null)); } 同时,你也有可能忘记某一个检查,比如说价格为 NULL 的时候怎么办。 这个检查在编译的时候是不会提示你的,只有程序真正上线运行了,出现了异常了,你才知道,我又忘记检查空了。 现在我们看看 Optional 中的 filter() 是怎么做的。 public boolean priceIsInRange2(Modem modem2) { return Optional.ofNullable(modem2).map(Modem::getPrice).filter(p -> p >= 10).filter(p -> p <= 15).isPresent(); } 你的程序精简到只需要一行就可以了。 map 这个方法只是简单的从对象中获得值,后面的过滤器才是对获得值进过滤的。 需要注意的是,使用 filter() 不会对输入的参数进行修改。 在我们的用例中,我们非常容易的就从我们的 Model 对象中获得了价格的属性。至于 map() 的使用我们在后面的内容中进行介绍。 针对上面的代码,首先如果对象出现 null 的时候是不会对你程序有任何影响的,还是能一直跑下去的。 其次就是逻辑非常简单,整个逻辑就是对价格进行判断,至于其他的 null 判断都是由 Optional 完成的。 @Test public void whenFiltersWithOptional_thenCorrect() { assertTrue(priceIsInRange2(new Modem(10.0))); assertFalse(priceIsInRange2(new Modem(9.9))); assertFalse(priceIsInRange2(new Modem(null))); assertFalse(priceIsInRange2(new Modem(15.5))); assertFalse(priceIsInRange2(null)); } 最开始的 If 代码也是可以完成价格的判断的,但是这个方法有着自身的缺陷,因此我们使用了…

2022年08月03日 0Comments 614Browse 0Like Read more
Computer Science

Java 8 开始新增的 Optional 类 - Optional 对象中的异常

使用 orElseThrow() 处理异常 在 orElse() 和 orElseGet() 方法之外,JDK 还添加了一个 orElseThrow() 方法,JDK 使用这个方法来处理对象为空的情况。 如果 Optional 的对象为 null 的话,orElse() 和 orElseGet() 是返回一个默认值,我们可以使用 orElseThrow() 来抛出一个异常。 考察下面的代码,在 Optional 为空的时候,异常是如何抛出的。 @Test(expected = IllegalArgumentException.class) public void whenOrElseThrowWorks_thenCorrect() { String nullName = null; String name = Optional.ofNullable(nullName).orElseThrow( IllegalArgumentException::new); } 这个异常处理方法是从 Java 8 开始提供的,可以通过在构造来传入异常。 Java 10 以后,还推出了一个更加简单的没有参数的 orElseThrow() 版本的方法。 这样的话,如果 Optional 对象为空的话,我们可以抛出一个 NoSuchElementException 异常: @Test(expected = NoSuchElementException.class) public void whenNoArgOrElseThrowWorks_thenCorrect() { String nullName = null; String name = Optional.ofNullable(nullName).orElseThrow(); } https://www.ossez.com/t/java-8-optional-optional/13968

2022年08月03日 0Comments 537Browse 0Like Read more
Computer Science

Java 8 开始新增的 Optional 类 - Optional 中的方法

fPresent() 的使用条件 ifPresent() 方法能够让我们在对对象进行下一步操作之前判断我们需要操作的对象是否为 Null,在没有 Optional 对象之前,我们通常使用下面的方法先进行判断: if(name != null) { System.out.println(name.length()); } 上面的程序逻辑是,首先判断 name 这个变量是不是为空,如果不为空的话,允许程序继续执行下一步。 这种判断方法不是很美观,代码也比较难看,更重要的是这种判断方法也是容易出错的。 有谁又能够保证我们在检查空,并且打印出变量后,这个变量不被再次使用呢,在这个变量再次使用的时候又有谁能够保证我们不会忘记空检查呢? 同时,有可能在程序的运行时导致空对象异常,NullPointerException。尤其是在程序因为输入的问题导致失败,无法启动的情况下,通常这种情况是因为程序本身没有被很好的设计和编码。 Optional 能够非常明确的处理可能为空的变量,这个是一种比较好的编码习惯。 让我们看看上面的代码在 Java 8 的环境下是如何进行实现的。 在常用的函数编程的情况下,我们在对象不进行空检查后使用函数式进行编程: @Test public void givenOptional_whenIfPresentWorks_thenCorrect() { Optional<String> opt = Optional.of("HoneyMoose"); opt.ifPresent(name -> LOG.debug("{}", name.length())); } 在上面的示例中,我们仅仅使用了 2 行代码就实现了第一种方法需要使用的 5 行代码。 第一行代码使用 Optional 对象来对我们的变量进行包装,第二行代码就对已经包装好的 Optional 对象进行相应的操作。 orElse() 方法来定义默认值 orElse() 这个方法被用来获取 Optional 实例中内部的值。 这个方法只需要 1 个参数,如果 Optional 对象中的值不为空的话,程序将会返回 Optional 对象中的值,否则将会使用 orElse 这个方法中输入参数的值来替代输出。 当然,你也可以在 orElse() 调用一个方法,至于和 orElseGet() 有什么不同,我们将会在后面进行说明。 考察下面的代码: @Test public void whenOrElseWorks_thenCorrect() { String nullName = null; String name = Optional.ofNullable(nullName).orElse("john"); assertEquals("john", name); } orElseGet() 方法来定义默认值 orElseGet() 和 orElse() 方法类似。 我们都知道,如果 Optional 为空的时候,如果使用 orElse() 方法,将会使用这个方法中输入的参数来替代返回,orElseGet() 就更近一步了。 orElseGet 提供的是一个函数式的接口,你可以在 orElseGet() 中使用函数编程,返回的结果就是这个函数进行运算后的结果。 @Test public void whenOrElseGetWorks_thenCorrect() { String nullName = null; String name = Optional.ofNullable(nullName).orElseGet(() -> "john"); assertEquals("john", name); } orElse() 和 orElseGet() 方法的对比 和很多程序员一样,如果你是开始接触 Java 8 的话,你可能对 orElse() 和 orElseGet() 2 个方法之间的执行不同有所不了解,觉得这 2 个方法在功能上都是重复的。     事实上看起来就是这样的,但是在实际上还是有一些微妙的不同的。 如果你对这些细微的不同不够了解的话,有可能会严重影响你程序的执行效率。 简单来说就是其中定义的函数是否被执行的区别,不管前面对 Optional 的判断是否为 null, orElse() 中调用的方法都会被执行,orElseGet() 却不会。 首先,让我们在测试类中定义一个 getMyDefault() 方法,这个方法不使用任何参数,只是打印并且返回一个字符串: public String getMyDefault() { System.out.println("Getting Default Value"); return "Default Value"; } 然后我们分别使用 orElse() 和 orElseGet() 来进行调用这个方法,我们来看看有什么不同。 Optional 对象为空的情况 @Test public void whenOrElseGetAndOrElseOverlap_thenCorrect() { String text = null; String defaultText = Optional.ofNullable(text).orElseGet(this::getMyDefault); assertEquals("Default Value", defaultText); defaultText = Optional.ofNullable(text).orElse(getMyDefault()); assertEquals("Default Value", defaultText); } 正如我们所看到的,因为 Optional 对象为空,我们定义的函数都被调用了。 程序的输出如下,从程序的输出可以看出来,这 2 个方法的执行是相同的。 The side effect is: Getting default value... Getting default value... Optional 对象不(NOT)为空的情况 使用上面相同的代码,但是这次不同的是,我们定义的 Optional 对象是不为空的 @Test public void whenOrElseGetAndOrElseDiffer_thenCorrect() { String text = "Text present"; LOG.debug("Using orElseGet:"); String defaultText = Optional.ofNullable(text).orElseGet(this::getMyDefault); assertEquals("Text present", defaultText); LOG.debug("Using orElse:"); defaultText = Optional.ofNullable(text).orElse(getMyDefault()); assertEquals("Text present", defaultText); } 如上面的代码所展示的,我们需要判断的 Optional 对象已经不为空了,程序的输出如下所示: Using orElseGet: Using orElse: Getting default value... 注意到 orElseGet() 方法在我们检查 Optional 对象不为空的时候,就不再调用 getMyDefault 这个方法。 然后我们再来看看 orElse() 这个方法,尽管…

2022年08月03日 0Comments 594Browse 0Like Read more
Computer Science

Java 8 开始新增的 Optional 类 - 检查 Optional 的值

检查值是否存在的 isPresent() 和 isEmpty() 方法 当我们使用 Optional 对象的时候,我们可以使用 isPresent() 方法来检查返回的 Optional 对象中是否有值。 Optional 对象可以是你自己创建的,或者是从其他方法中返回的。 @Test public void givenOptional_whenIsPresentWorks_thenCorrect() { Optional<String> opt = Optional.of("HoneyMoose"); assertTrue(opt.isPresent()); opt = Optional.ofNullable(null); assertFalse(opt.isPresent()); } 如果 Optional 对象中的值不为 null 的话,这个方法将会返回 True。 同样的,如果使用 Java 11 的话,你可以使用与 isPresent 相反的方法 isEmpty。 如果你的对象中的值为 null 的话,isEmpty 将会返回 True。 @Test public void givenAnEmptyOptional_thenIsEmptyBehavesAsExpected_JDK11() { Optional<String> opt = Optional.of("Baeldung"); assertFalse(opt.isEmpty()); opt = Optional.ofNullable(null); assertTrue(opt.isEmpty()); } 如果你查看 API 的话,你会看到 JDK 的源代码只是用了简单的判断是否等于 null。   这 2 个方法的使用正好是相反的。   https://www.ossez.com/t/java-8-optional-optional/13966

2022年08月03日 0Comments 549Browse 0Like Read more
Computer Science

Java 8 开始新增的 Optional 类 - 创建 Optional 对象

创建一个 Optional 对象 有下面的一些方法可以被用来创建 Optional 对象。     empty 静态方法 如果你想创建一个空的 Optional 的对象,我们简单的使用 Optional 类提供的 empty() 静态方法: @Test public void whenCreatesEmptyOptional_thenCorrect() { Optional<String> empty = Optional.empty(); assertFalse(empty.isPresent()); } 需要注意的是,我们使用 isPresent() 方法来检查 Optional 对象中值的情况。 如果我们创建的 Optional 对象有值的话,isPresent() 方法将会返回 True,否则 isPresent() 这个方法将会返回 False。 我们将会在本页面的后续部分继续讨论有关 isPresent() 方法的使用。 of 静态方法 下面的方法将会创建一个 Optional 对象,在创建这个对象的时候,我们使用了另外的一个静态方法 of() 来进行创建: @Test public void givenNonNull_whenCreatesNonNullable_thenCorrect() { String name = "HoneyMoose"; Optional<String> opt = Optional.of(name); assertTrue(opt.isPresent()); } 需要注意的是,如果你使用 of 静态方法创建一个 Optional 对象的时候,你还是有机会面临空对象(NullPointerException)异常。 考察下面的代码,如果运行的话,你还是会命令到空对象异常,如果你初始化 Optional 为空的话。 @Test(expected = NullPointerException.class) public void givenNull_whenThrowsErrorOnCreate_thenCorrect() { String name = null; Optional.of(name); } ofNullable 静态方法 有时候,我们希望在我们的代码中使用 Null 值。 这个时候,你可以使用静态方法 ofNullable() ,这个静态方法将会告诉 Optional 对象是可能为 Null 的。 @Test public void givenNonNull_whenCreatesNullable_thenCorrect() { String name = "HoneyMoose"; Optional<String> opt = Optional.ofNullable(name); assertTrue(opt.isPresent()); } 通过上面的操作,我们可以在 Optional 使用 null,这样的话,如果你对 Optional 进行初始化的时候,不会因为null 的使用而导致异常。 @Test public void givenNull_whenCreatesNullable_thenCorrect() { String name = null; Optional<String> opt = Optional.ofNullable(name); assertFalse(opt.isPresent()); } https://www.ossez.com/t/java-8-optional-optional/13965

2022年08月03日 0Comments 600Browse 0Like Read more
Computer Science

Java 8 开始新增的 Optional 类

如果你写过一些 Java 代码的话,你应该知道 Java 中最常见的就是空指针异常错误。 这个错误的原因就是你对一个为空的对象进行操作了。 比如说,你有一个 List,但是这个 List 是空对象,如果你要向这个 List 中添加元素或者删除元素的话,你铁定会遇到空对象的异常。 Optional 类是一个可以为 NULL 的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。 Optional 是个容器:它可以保存类型T的值,或者仅仅保存 NULL。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。     Optional 类的引入很好的解决空指针异常。 概述 在本指南中,我们针对 Optional 来进行一些探讨。 Optional 这个类最新是从 Java 8 中引入的,其主要目的如上面我们介绍的,就是为了解决 Java 中广受诟病的空异常。 Java 从 类型级别(type-level) 给出了一个解决方案,用来替代 null。 In this tutorial, we’re going to show the Optional class that was introduced in Java 8. 如果你还想对 Java 的 Optional 了解更多的话,你可以直接访问 Oracle 提供的官方 API,访问地址为: Tired of Null Pointer Exceptions? Consider Using Java SE 8's Optional!   文章列表 因 Optional 有关的内容比较多,请通过下面的链接访问具体的小主题: Java 8 开始新增的 Optional 类 - 创建 Optional 对象 Java 8 开始新增的 Optional 类 - 检查 Optional 的值 Java 8 开始新增的 Optional 类 - Optional 中的方法 Java 8 开始新增的 Optional 类 - Optional 对象中的异常 Java 8 开始新增的 Optional 类 - Optional 对象中的返回 Java 8 开始新增的 Optional 类 - Optional 在 Java 8 中的 Chaining 特性 Java 8 开始新增的 Optional 类 - Optional 在 Java 9 中的 API Java 8 开始新增的 Optional 类 - Optional 可能存在的滥用 Java 8 开始新增的 Optional 类 - Optional 对象序列化 结论 如果你按照上面的顺序阅读完成相关文章的话,你应该对在 Java 8 中开始使用的 Optional 类有了一些基本的了解。 同时在这边文章中也对为什么要使用 Optional 对象来替代 null 检查进行了一些说明。 同时我们也对如何从 Optional 中获得值进行了一些说明,同时对如果值是 null ,我应该如何设置默认值使用的 orElse() 和 orElseGet() 方法进行了一些阐述。 最后,我们对 Optional 返回的值如何进行转换进行了描述,在对返回值进行转换的话,我们可能会使用到 map(), flatMap() 和 filter() 方法。 同时我们还对 Optional 的一些特性,方法进行了阐述和说明。 在最后,我们对为什么使用 Optional 为方法的参数是不好的选项的原因进行了说明,并且举例如何避免这个问题。 https://www.ossez.com/t/java-8-optional/13964  

2022年08月03日 0Comments 507Browse 0Like Read more
Computer Science

反向代理 413 Request Entity Too Large 问题

如果在服务器上使用了反向代理。 你可能会收到下面的错误信息: 413 Request Entity Too Large errors`。 问题和解决 问题的原因就是反向代理服务器针对 HTTP 访问的时候有限制, Nginx 在 Nginx 的配置文件中,添加下面的内容 client_max_body_size 100M; 上面的配置信息显示了具体的配置位置。 在默认情况下 Nginx 配置的 client_max_body_size 大小为 1M。 很多时候是肯定不够用的。 Apache Apache 在 http.conf 配置文件中有一个 LimitRequestBody 参数。 你可以将这个参数配置为:LimitRequestBody 104857600。 虽然你成功配置了上面的参数,但是有时候上面的参数在 Apache 中可能没有办法解决你的问题。 这是因为有时候和后台代理的程序也有关系。 总结 根据最近想买的一些调整,使用 Nginx 作为反向代理,会比 Apache 更加轻量,配置更加容易。   https://www.ossez.com/t/413-request-entity-too-large/13963

2022年08月03日 0Comments 966Browse 0Like Read more
Computer Science

看这个情况这块硬盘是要交代了

如果你收到你的存储提示下面的信息。     最好的办法就是先准备一块新的硬盘吧,因为你也不知道你这块硬盘什么时候突然就交代了。   https://www.ossez.com/t/topic/13962

2022年08月03日 0Comments 728Browse 0Like Read more
文化旅游

传统村落水口山镇大皮口村 - 历史沿革

大皮口村所处的水口山镇原名叫隆庆里。柴君山之水,与境内梅溪河汇于对门山狭地,形成锁住水口之势,故名“水口山”,水口山镇由此得名。 清代中期,在梅溪河东岸建街为圩,建一座桥连梅溪河东西两岸,桥名“聚胜桥”。聚胜桥是一座风雨桥,光绪年的《零陵县志》有记:“聚胜桥:隆庆里,石砌三拱。 ”聚胜桥大约在乾隆年间建,后来这座桥几经修缮。现桥于1984年改建,把原木桥面改为钢筋混凝土,而桥墩仍是原来的石桥墩,桥梁柱仍是青石柱。 1949年后,梅溪河西又建新街,这条街成为当时零陵县西南最大的农贸集市。1950年代水口山为零陵县第十区,尔后改为水口山公社,1984年更名水口山乡,1986年经省政府批准水口山撤乡建镇。     大皮口传统村落以汉代杨震为始祖。永州知事张灿为《梅溪杨氏族谱》写的《叙》:“杨氏巨族自汉杨震迄宋龟山(宋朝理学家杨时(1053—1130),亲承二程先生道脉,为求学留下‘程门立雪’之典故),有元季肇基梅溪而居。”“ 今兹考家乘,自元季通公肇基隆庆之梅溪,是为厥生民之祖。”大皮口村以杨震和杨时为始祖,其用意是告诫子孙们追求奋斗的目标方向,做官需向杨震一样清廉,读书要向杨时一样谦逊求学,求真悟道。 村民曾建庙庵祭祀杨震。光绪《零陵县志》记:“梅溪庙在隆庆里,明时建,祀汉清白吏杨震。凡遇疾疫旱干,祈祷辄应。里有争端,来庙质曲直,人莫敢诬。 ”梅溪杨氏以汉杨震为始祖,并以神而祀,祈保佑其子民平安免灾疫,也祈后人跟杨震一样,清廉留史。现梅溪庙已毁。 大皮口村与大庆坪夫江仔村是同一个先祖,同根同源。先祖名叫杨智通,《杨氏族谱》(四知堂)载:“杨智通,字亨伯,三十郎,元季仁宗改元延祐,七年庚申岁正月(1321)正月六日戌时生,大明洪武二十二年己巳岁(1390)十月十九日辰时殁,享寿七十岁,零陵梅溪杨氏之始祖也。 杨智通兄弟四人,史道、智远、智通、智达。元元统十四年(1346),智远、智通、智达兄弟三人自江西客游湖湘,于丁亥二月初八定居长沙定冲桥西瓜坪。元至正十年(1350),智通、智达二人来永州贸易七年,智达公遂由芝城至宁远,家焉。 己亥秋,吕熊将军朝祀舜陵,智通与事,因乘便与兄弟一会,后仍回到泉陵。元至正癸卯二十三年(1363)十月,乃贸易至零陵西乡隆庆里大马井,主贺宗乡家,遂拜为父母。后置产业起家,卜筑零陵梅溪宅,因家焉。” 杨智通的长子杨世忠于明洪武三年出生,永乐九年逝世。安葬在大皮口村后鲢鱼洞旁。从这些历史资料可知,杨氏在水口山落户已有600多年的历史,根据“卜筑零陵梅溪宅”和杨氏第二代杨世忠“葬大皮口村后鲢鱼洞”的记述,大皮口村的先祖杨智通最初落户应是大皮口村这里,杨氏一族一直在大皮口村生养休息,不断发展。所以至今大皮口村全是杨姓,没有杂居其他姓。 杨氏在水口山梅溪洞经过几百年的发展,后来因人口增多,如《杨氏族谱》所写“聚四十余村,二万余丁之众”,杨氏人员只得向村外其它地方另立户发展。水口山和大庆坪以及周围许多杨姓村子,大多是从大皮口搬迁出去后发展起来的。 杨氏第六世孙杨万柏迁居水口山镇的三坛峰,而夫江仔的先祖又从三坛峰迁出。乾隆二十七年零陵西边发生大灾,杨氏的一些族人再一次从古宅地迁居其它地方。有从水口山瓦窑头迁之道县,有迁之广东,也有迁之滥泥田、豹虎山的,还有迁之零陵城边诸葛庙的。“ 智通公自世字辈分三大房,以后又分为四十八村,及今几百余村矣,皆同出智通公脉下。”在水口山镇梅溪河东岸边“杨氏宗祠”的捐款碑落款上,有许多以大皮口村为祖先发祥地的村子名,贵州、广东、广西等省的都有。 大皮口村因人丁的发展与自然灾害的原因,杨氏子弟搬至其它地方发展的有许多,但六百多年来,大皮口村作为零陵县水口山一带杨姓氏族的发祥地,一直都有杨姓氏族人居住在这里。   https://www.usreio.com/t/topic/260

2022年08月02日 0Comments 1527Browse 0Like Read more
1…119120121122123…314
Archives
  • November 2026
  • October 2026
  • September 2026
  • August 2026
  • July 2026
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,398)
    • Confluence (663)
    • Gradle (12)
  • U.S. (593)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1