Date: Tue, 16 May 2023 16:08:46 +0800
Subject: [PATCH 49/93] =?UTF-8?q?docs:=20=E4=BF=AE=E6=AD=A3=E6=B3=A8?=
=?UTF-8?q?=E9=87=8A=E4=BF=A1=E6=81=AF?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../core-java-20/src/JEP433SwitchTest.java | 2 +-
.../core-java-20/src/Jep432RecordAndInstance.java | 2 +-
core-java-modules/core-java-20/src/RecordTest.java | 2 +-
.../src/main/java/com/wdbyte/Jdk8Base64.java | 2 +-
.../src/main/java/com/wdbyte/Jdk8Function.java | 2 +-
.../src/main/java/com/wdbyte/Jdk8Interface.java | 2 +-
.../src/main/java/com/wdbyte/Jdk8Lambda.java | 2 +-
.../src/main/java/com/wdbyte/Jdk8LocalDateTime.java | 2 +-
.../src/main/java/com/wdbyte/Jdk8NashornJs.java | 2 +-
.../src/main/java/com/wdbyte/Jdk8Optional.java | 2 +-
.../src/main/java/com/wdbyte/Jdk8Stream.java | 2 +-
.../java/com/wdbyte/comparator/Java8Comparator.java | 2 +-
.../java/com/wdbyte/comparator/Java8Comparator2.java | 2 +-
.../java/com/wdbyte/comparator/Java8Comparator3.java | 2 +-
.../java/com/wdbyte/comparator/Java8Comparator4.java | 2 +-
.../java/com/wdbyte/comparator/Java8Comparator5.java | 2 +-
.../java/com/wdbyte/comparator/Java8Comparator6.java | 2 +-
.../java/com/wdbyte/comparator/Java8Comparator7.java | 2 +-
.../src/main/java/com/wdbyte/JavaDataType.java | 2 +-
.../src/main/java/com/wdbyte/array/JavaArray.java | 2 +-
.../src/main/java/com/wdbyte/array/JavaArray2.java | 2 +-
.../src/main/java/com/wdbyte/array/JavaArray3.java | 2 +-
.../src/main/java/com/wdbyte/array/JavaArray4.java | 2 +-
.../java/com/wdbyte/collection/CollectionTest.java | 2 +-
.../java/com/wdbyte/collection/CollectionTest2.java | 2 +-
.../java/com/wdbyte/collection/CollectionTest3.java | 2 +-
.../java/com/wdbyte/collection/CollectionTest4.java | 2 +-
.../java/com/wdbyte/collection/CollectionTest5.java | 2 +-
.../src/main/java/com/wdbyte/collection/MapTest.java | 2 +-
.../src/main/java/com/wdbyte/collection/MapTest2.java | 2 +-
.../src/main/java/com/wdbyte/date/JavaDateCalc.java | 2 +-
.../src/main/java/com/wdbyte/date/JavaDateCalc2.java | 2 +-
.../src/main/java/com/wdbyte/date/JavaDateCreate.java | 2 +-
.../src/main/java/com/wdbyte/date/JavaDateDiff.java | 2 +-
.../src/main/java/com/wdbyte/date/JavaDateFormat.java | 2 +-
.../src/main/java/com/wdbyte/enum2/CalcTest.java | 2 +-
.../src/main/java/com/wdbyte/enum2/WeekdayTest.java | 2 +-
.../main/java/com/wdbyte/exception/JavaException1.java | 2 +-
.../main/java/com/wdbyte/exception/JavaException2.java | 2 +-
.../main/java/com/wdbyte/exception/JavaException3.java | 2 +-
.../main/java/com/wdbyte/exception/JavaException4.java | 2 +-
.../main/java/com/wdbyte/exception/JavaException5.java | 2 +-
.../main/java/com/wdbyte/exception/JavaException6.java | 2 +-
.../main/java/com/wdbyte/exception/JavaException7.java | 2 +-
.../main/java/com/wdbyte/exception/JavaException8.java | 2 +-
.../src/main/java/com/wdbyte/oop/JavaExtends.java | 2 +-
.../src/main/java/com/wdbyte/oop/abs/AbsPerson.java | 2 +-
.../src/main/java/com/wdbyte/oop/abs/PersonTest.java | 2 +-
.../src/main/java/com/wdbyte/oop/abs/Student.java | 2 +-
.../src/main/java/com/wdbyte/oop/abs/Teacher.java | 2 +-
.../java/com/wdbyte/oop/interfac/JavaInterface.java | 2 +-
.../java/com/wdbyte/oop/interfac/JavaInterface2.java | 2 +-
.../java/com/wdbyte/oop/interfac/JavaInterface3.java | 2 +-
.../java/com/wdbyte/oop/polymorphism/AliyunOss.java | 2 +-
.../src/main/java/com/wdbyte/oop/polymorphism/Oss.java | 2 +-
.../main/java/com/wdbyte/oop/polymorphism/OssUtil.java | 2 +-
.../java/com/wdbyte/oop/polymorphism/TencentOss.java | 2 +-
.../java/com/wdbyte/oop/polymorphism/inter/Test.java | 2 +-
.../java/com/wdbyte/oop/polymorphism/inter/Test2.java | 2 +-
.../main/java/com/wdbyte/{ => string}/JavaString.java | 4 ++--
.../com/wdbyte/{ => string}/JavaStringBuilder.java | 4 ++--
.../src/main/java/com/wdbyte/HashMapKey.java | 10 +++++++++-
62 files changed, 72 insertions(+), 64 deletions(-)
rename core-java-modules/core-java-base/src/main/java/com/wdbyte/{ => string}/JavaString.java (97%)
rename core-java-modules/core-java-base/src/main/java/com/wdbyte/{ => string}/JavaStringBuilder.java (94%)
diff --git a/core-java-modules/core-java-20/src/JEP433SwitchTest.java b/core-java-modules/core-java-20/src/JEP433SwitchTest.java
index 8080d37..39094ad 100644
--- a/core-java-modules/core-java-20/src/JEP433SwitchTest.java
+++ b/core-java-modules/core-java-20/src/JEP433SwitchTest.java
@@ -1,5 +1,5 @@
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class JEP433SwitchTest {
public static void main(String[] args) {
diff --git a/core-java-modules/core-java-20/src/Jep432RecordAndInstance.java b/core-java-modules/core-java-20/src/Jep432RecordAndInstance.java
index 3e732a6..6ca31d5 100644
--- a/core-java-modules/core-java-20/src/Jep432RecordAndInstance.java
+++ b/core-java-modules/core-java-20/src/Jep432RecordAndInstance.java
@@ -1,5 +1,5 @@
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class Jep432RecordAndInstance {
public static void main(String[] args) {
diff --git a/core-java-modules/core-java-20/src/RecordTest.java b/core-java-modules/core-java-20/src/RecordTest.java
index ef9a7c1..2a3b46c 100644
--- a/core-java-modules/core-java-20/src/RecordTest.java
+++ b/core-java-modules/core-java-20/src/RecordTest.java
@@ -1,5 +1,5 @@
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/05/04
*/
public class RecordTest {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Base64.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Base64.java
index f3034f9..c50f47c 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Base64.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Base64.java
@@ -7,7 +7,7 @@
*
* JDK8 对 base64 编码的支持
*
- * @Author niujinpeng
+* @Author https://www.wdbyte.com
* @Date 2019/6/12 9:47
*/
public class Jdk8Base64 {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Function.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Function.java
index 78d045b..9d14a98 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Function.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Function.java
@@ -14,7 +14,7 @@
* - Consumer: 数据消费器, 接收一个 T类型的对象,无返回值,通常用于设置T对象的值; 单参数无返回值的行为接口;提供了 accept, andThen 方法
* - Predicate: 条件测试器,接收一个 T 类型的对象,返回布尔值,通常用于传递条件函数; 单参数布尔值的条件性接口。提供了 test (条件测试) , and-or- negate(与或非) 方法。
*
- * @Author niujinpeng
+* @Author https://www.wdbyte.com
* @Date 2019/2/18 22:08
*/
public class Jdk8Function {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Interface.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Interface.java
index 4037c71..790262a 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Interface.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Interface.java
@@ -5,7 +5,7 @@
* 接口的静态方法和默认方法
*
*
- * @Author niujinpeng
+* @Author https://www.wdbyte.com
* @Date 2019/2/18 22:52
*/
public class Jdk8Interface {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Lambda.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Lambda.java
index b2663cb..357f967 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Lambda.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Lambda.java
@@ -23,7 +23,7 @@
* 4. 花括号可选,一个语句可以不用花括号,多个参数则花括号必须。
* 5. 返回值可选,如果只有一个表达式,可以自动返回不需要 return 语句,花括号中需要 return 语法。
*
- * @Author niujinpeng
+* @Author https://www.wdbyte.com
* @Date 2019/2/17 14:48
*/
public class Jdk8Lambda {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8LocalDateTime.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8LocalDateTime.java
index c41caf0..9af6004 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8LocalDateTime.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8LocalDateTime.java
@@ -19,7 +19,7 @@
* - 实现了大部分常用操作方法
*
*
- * @Author niujinpeng
+* @Author https://www.wdbyte.com
* @Date 2019/2/19 17:48
*/
public class Jdk8LocalDateTime {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8NashornJs.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8NashornJs.java
index 6a1a2e7..ac34fd1 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8NashornJs.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8NashornJs.java
@@ -15,7 +15,7 @@
*
* 这类Script引擎遵循相同的规则,允许Java和JavaScript交互使用,例子代码如下:
*
- * @Author niujinpeng
+* @Author https://www.wdbyte.com
* @Date 2019/6/12 9:41
*/
public class Jdk8NashornJs {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Optional.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Optional.java
index 4288b27..ec3fa57 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Optional.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Optional.java
@@ -10,7 +10,7 @@
*
* JDK8 为解决空指针增加的 Optional 方法
*
- * @Author niujinpeng
+* @Author https://www.wdbyte.com
* @Date 2019/2/19 11:40
*/
public class Jdk8Optional {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Stream.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Stream.java
index aa1a6b5..d78cdb2 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Stream.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/Jdk8Stream.java
@@ -13,7 +13,7 @@
*
* JDK 8 steam 流操作
*
- * @Author niujinpeng
+* @Author https://www.wdbyte.com
* @Date 2019/8/12 18:03
*/
public class Jdk8Stream {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator.java
index 78f7109..b4c5773 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator.java
@@ -6,7 +6,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/02
*/
public class Java8Comparator {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator2.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator2.java
index bef75cc..b53e60e 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator2.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator2.java
@@ -6,7 +6,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/02
*/
public class Java8Comparator2 {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator3.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator3.java
index 70d3a24..4031315 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator3.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator3.java
@@ -5,7 +5,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/02
*/
public class Java8Comparator3 {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator4.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator4.java
index 250e30a..c02c30d 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator4.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator4.java
@@ -5,7 +5,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/02
*/
public class Java8Comparator4 {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator5.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator5.java
index d65054b..ca3ae94 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator5.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator5.java
@@ -6,7 +6,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/02
*/
public class Java8Comparator5 {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator6.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator6.java
index bec0fb7..20ab437 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator6.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator6.java
@@ -6,7 +6,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/02
*/
public class Java8Comparator6 {
diff --git a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator7.java b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator7.java
index c7c9d25..2918e31 100644
--- a/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator7.java
+++ b/core-java-modules/core-java-8/src/main/java/com/wdbyte/comparator/Java8Comparator7.java
@@ -5,7 +5,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/02
*/
public class Java8Comparator7 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaDataType.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaDataType.java
index 24aa637..192314b 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaDataType.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaDataType.java
@@ -1,7 +1,7 @@
package com.wdbyte;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/03/23
*/
public class JavaDataType {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray.java
index daac4ec..521b1c2 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray.java
@@ -5,7 +5,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/03/23
*/
public class JavaArray {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray2.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray2.java
index b5a5b66..ba92287 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray2.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray2.java
@@ -1,7 +1,7 @@
package com.wdbyte.array;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/03/25
*/
public class JavaArray2 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray3.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray3.java
index d48cd29..3816c54 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray3.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray3.java
@@ -1,7 +1,7 @@
package com.wdbyte.array;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/03/25
*/
public class JavaArray3 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray4.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray4.java
index b1b998c..4665cc6 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray4.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/array/JavaArray4.java
@@ -2,7 +2,7 @@
/**
* 锯齿数组
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/03/25
*/
public class JavaArray4 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest.java
index 67b150a..fc953ed 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest.java
@@ -4,7 +4,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class CollectionTest {
public static void main(String[] args) {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest2.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest2.java
index dfab350..3c67874 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest2.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest2.java
@@ -9,7 +9,7 @@
import java.util.TreeSet;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class CollectionTest2 {
public static void main(String[] args) {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest3.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest3.java
index 7f75e07..2989ef5 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest3.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest3.java
@@ -6,7 +6,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class CollectionTest3 {
public static void main(String[] args) {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest4.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest4.java
index 990fea2..349619b 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest4.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest4.java
@@ -7,7 +7,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class CollectionTest4 {
public static void main(String[] args) {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest5.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest5.java
index 2dc01b0..6d480e8 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest5.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/CollectionTest5.java
@@ -7,7 +7,7 @@
import java.util.List;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class CollectionTest5 {
public static void main(String[] args) {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/MapTest.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/MapTest.java
index b19d7b1..cd346f9 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/MapTest.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/MapTest.java
@@ -4,7 +4,7 @@
import java.util.Map;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class MapTest {
public static void main(String[] args) {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/MapTest2.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/MapTest2.java
index 306e313..235c79a 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/MapTest2.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/collection/MapTest2.java
@@ -5,7 +5,7 @@
import java.util.Map;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class MapTest2 {
public static void main(String[] args) {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCalc.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCalc.java
index e400cdb..5c39fa8 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCalc.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCalc.java
@@ -5,7 +5,7 @@
import java.util.Date;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/26
*/
public class JavaDateCalc {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCalc2.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCalc2.java
index 16f0c4a..922030f 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCalc2.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCalc2.java
@@ -5,7 +5,7 @@
import java.util.Date;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/26
*/
public class JavaDateCalc2 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCreate.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCreate.java
index 2046ffe..44c6bbb 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCreate.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateCreate.java
@@ -3,7 +3,7 @@
import java.util.Date;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/25
*/
public class JavaDateCreate {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateDiff.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateDiff.java
index 2f47ade..09e3363 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateDiff.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateDiff.java
@@ -4,7 +4,7 @@
import java.util.Date;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/25
*/
public class JavaDateDiff {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateFormat.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateFormat.java
index 47be812..96a3c89 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateFormat.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/date/JavaDateFormat.java
@@ -5,7 +5,7 @@
import java.util.Date;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/25
*/
public class JavaDateFormat {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/enum2/CalcTest.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/enum2/CalcTest.java
index b9eeff9..56e2465 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/enum2/CalcTest.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/enum2/CalcTest.java
@@ -1,7 +1,7 @@
package com.wdbyte.enum2;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/05/01
*/
public class CalcTest {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/enum2/WeekdayTest.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/enum2/WeekdayTest.java
index 0478277..6d83265 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/enum2/WeekdayTest.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/enum2/WeekdayTest.java
@@ -1,7 +1,7 @@
package com.wdbyte.enum2;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/05/01
*/
public class WeekdayTest {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException1.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException1.java
index 18b22d1..8fe2506 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException1.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException1.java
@@ -1,7 +1,7 @@
package com.wdbyte.exception;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class JavaException1 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException2.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException2.java
index e680d35..c5b2386 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException2.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException2.java
@@ -1,7 +1,7 @@
package com.wdbyte.exception;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class JavaException2 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException3.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException3.java
index 4395064..5e37b10 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException3.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException3.java
@@ -1,7 +1,7 @@
package com.wdbyte.exception;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class JavaException3 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException4.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException4.java
index a88f5e5..0ba0f3d 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException4.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException4.java
@@ -1,7 +1,7 @@
package com.wdbyte.exception;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class JavaException4 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException5.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException5.java
index acbb901..9366d98 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException5.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException5.java
@@ -3,7 +3,7 @@
import org.apache.commons.lang3.ObjectUtils.Null;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class JavaException5 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException6.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException6.java
index 4cbff20..2b68230 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException6.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException6.java
@@ -5,7 +5,7 @@
import java.nio.file.Paths;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/27
*/
public class JavaException6 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException7.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException7.java
index 9b5483d..bdbbc19 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException7.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException7.java
@@ -5,7 +5,7 @@
import java.nio.file.Paths;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/27
*/
public class JavaException7 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException8.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException8.java
index 905a2ab..1f86646 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException8.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/exception/JavaException8.java
@@ -1,7 +1,7 @@
package com.wdbyte.exception;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
*/
public class JavaException8 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/JavaExtends.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/JavaExtends.java
index 7811d7f..df818b3 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/JavaExtends.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/JavaExtends.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/03/31
*/
public class JavaExtends {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/AbsPerson.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/AbsPerson.java
index 062bb70..c142711 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/AbsPerson.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/AbsPerson.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.abs;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/17
*/
public abstract class AbsPerson {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/PersonTest.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/PersonTest.java
index 3c8d06e..02144e2 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/PersonTest.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/PersonTest.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.abs;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/17
*/
public class PersonTest {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/Student.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/Student.java
index bd9060f..dbfa7b7 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/Student.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/Student.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.abs;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/17
*/
public class Student extends AbsPerson {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/Teacher.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/Teacher.java
index 8c790c8..1db8158 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/Teacher.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/Teacher.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.abs;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/17
*/
public class Teacher extends AbsPerson {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface.java
index 7359a11..e700d09 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.interfac;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/13
*/
public class JavaInterface {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface2.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface2.java
index b4bce89..db299b1 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface2.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface2.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.interfac;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/13
*/
public class JavaInterface2 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface3.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface3.java
index d4a75a9..abd9ff9 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface3.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/JavaInterface3.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.interfac;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/14
*/
public class JavaInterface3 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/AliyunOss.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/AliyunOss.java
index d6229c3..3bedb6c 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/AliyunOss.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/AliyunOss.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.polymorphism;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/18
*/
public class AliyunOss implements Oss {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/Oss.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/Oss.java
index f7466eb..8fd2af8 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/Oss.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/Oss.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.polymorphism;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/18
*/
public interface Oss {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/OssUtil.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/OssUtil.java
index 1e9eeef..5a07fc1 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/OssUtil.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/OssUtil.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.polymorphism;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/18
*/
public class OssUtil {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/TencentOss.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/TencentOss.java
index ece1f22..4993abd 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/TencentOss.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/TencentOss.java
@@ -1,7 +1,7 @@
package com.wdbyte.oop.polymorphism;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/18
*/
public class TencentOss implements Oss {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/inter/Test.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/inter/Test.java
index 7565cd6..9d15814 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/inter/Test.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/inter/Test.java
@@ -4,7 +4,7 @@
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/18
*/
public class Test {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/inter/Test2.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/inter/Test2.java
index 778c203..a1b7e3b 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/inter/Test2.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/polymorphism/inter/Test2.java
@@ -2,7 +2,7 @@
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/04/18
*/
public class Test2 {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaString.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/string/JavaString.java
similarity index 97%
rename from core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaString.java
rename to core-java-modules/core-java-base/src/main/java/com/wdbyte/string/JavaString.java
index 31890ee..bc4d4e6 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaString.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/string/JavaString.java
@@ -1,7 +1,7 @@
-package com.wdbyte;
+package com.wdbyte.string;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/03/22
*/
public class JavaString {
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaStringBuilder.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/string/JavaStringBuilder.java
similarity index 94%
rename from core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaStringBuilder.java
rename to core-java-modules/core-java-base/src/main/java/com/wdbyte/string/JavaStringBuilder.java
index b492031..514054b 100644
--- a/core-java-modules/core-java-base/src/main/java/com/wdbyte/JavaStringBuilder.java
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/string/JavaStringBuilder.java
@@ -1,7 +1,7 @@
-package com.wdbyte;
+package com.wdbyte.string;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/03/30
*/
public class JavaStringBuilder {
diff --git a/core-java-modules/core-java-performance-code/src/main/java/com/wdbyte/HashMapKey.java b/core-java-modules/core-java-performance-code/src/main/java/com/wdbyte/HashMapKey.java
index 1fc032e..31e622b 100644
--- a/core-java-modules/core-java-performance-code/src/main/java/com/wdbyte/HashMapKey.java
+++ b/core-java-modules/core-java-performance-code/src/main/java/com/wdbyte/HashMapKey.java
@@ -3,13 +3,18 @@
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
+import java.util.concurrent.TimeUnit;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair;
import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Level;
import org.openjdk.jmh.annotations.Measurement;
+import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OperationsPerInvocation;
+import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
@@ -20,9 +25,12 @@
* @author https://www.wdbyte.com
* @date 2021/12/06
*/
-@State(Scope.Benchmark)
+@State(Scope.Thread)
+@Fork(2)
@Warmup(iterations = 3, time = 3)
@Measurement(iterations = 5, time = 3)
+@BenchmarkMode(Mode.AverageTime)
+@OutputTimeUnit(TimeUnit.MILLISECONDS)
public class HashMapKey {
private int size = 1024;
From da5c648fcee5c8bd065584a7f845222e61dd9304 Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Tue, 16 May 2023 16:11:07 +0800
Subject: [PATCH 50/93] update README.md
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 9e77cfc..2af0b44 100644
--- a/README.md
+++ b/README.md
@@ -184,6 +184,7 @@ Java 版本任你发,我用 Java 8 。但是多学点这种装x技巧总没错
>出处:孔子《论语》
一款好用的工具,不仅可以装X,更可以让你事半功倍,准时下班。
+- [Protobuf 教程](https://www.wdbyte.com/tool/protobuf/)
- [Apache HttpClient 5 使用详细教程](https://www.wdbyte.com/tool/httpclient5.html)
- [Jackson 解析 JSON 详细教程](https://www.wdbyte.com/tool/jackson.html)
- [Java 反编译工具的使用与对比分析](https://www.wdbyte.com/2021/05/java-decompiler/)
From bdc331c1ac2ae2f0f22e9fdbd2b1ec2714a1f602 Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Tue, 16 May 2023 16:11:33 +0800
Subject: [PATCH 51/93] feat: leetcode
---
.../LeetCode388_LengthLongestPath.java | 2 +-
.../LeetCode396_MaxRotateFunction.java | 2 +-
...etCode515_FindLargeValueInEachTreeRow.java | 2 +-
.../leetcode/LeetCode587_OuterTrees.java | 48 +++++++++++++++++++
.../leetcode/LeetCode824_ToGoatLatin.java | 2 +-
5 files changed, 52 insertions(+), 4 deletions(-)
create mode 100644 leetcode/src/main/java/com/wdbyte/leetcode/LeetCode587_OuterTrees.java
diff --git a/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode388_LengthLongestPath.java b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode388_LengthLongestPath.java
index 8a41422..46a0ea9 100644
--- a/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode388_LengthLongestPath.java
+++ b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode388_LengthLongestPath.java
@@ -6,7 +6,7 @@
* 388. 文件的最长绝对路径
* https://leetcode-cn.com/problems/longest-absolute-file-path/
*
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/20
*/
public class LeetCode388_LengthLongestPath {
diff --git a/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode396_MaxRotateFunction.java b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode396_MaxRotateFunction.java
index adbe6e1..2e563ef 100644
--- a/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode396_MaxRotateFunction.java
+++ b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode396_MaxRotateFunction.java
@@ -22,7 +22,7 @@
* F(3) = (0 * 3) + (1 * 2) + (2 * 6) + (3 * 4) = 0 + 2 + 12 + 12 = 26
* 所以 F(0), F(1), F(2), F(3) 中的最大值是 F(3) = 26 。
*
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/22
*/
public class LeetCode396_MaxRotateFunction {
diff --git a/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode515_FindLargeValueInEachTreeRow.java b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode515_FindLargeValueInEachTreeRow.java
index 141a534..3560d97 100644
--- a/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode515_FindLargeValueInEachTreeRow.java
+++ b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode515_FindLargeValueInEachTreeRow.java
@@ -8,7 +8,7 @@
*
* 515. 在每个树行中找最大值
*
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/06/24
*/
public class LeetCode515_FindLargeValueInEachTreeRow {
diff --git a/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode587_OuterTrees.java b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode587_OuterTrees.java
new file mode 100644
index 0000000..ed2a356
--- /dev/null
+++ b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode587_OuterTrees.java
@@ -0,0 +1,48 @@
+package com.wdbyte.leetcode;
+
+/**
+ * https://leetcode-cn.com/problems/erect-the-fence/
+ * 587. 安装栅栏
+ * 在一个二维的花园中,有一些用 (x, y) 坐标表示的树。由于安装费用十分昂贵,你的任务是先用最短的绳子围起
+ * 所有的树。只有当所有的树都被绳子包围时,花园才能围好栅栏。你需要找到正好位于栅栏边界上的树的坐标。
+ *
+ * @author https://www.wdbyte.com
+ * @date 2022/04/23
+ */
+public class LeetCode587_OuterTrees {
+ public static void main(String[] args) {
+ int[][] trees = {{1, 1}, {2, 2}, {2, 0}, {2, 4}, {3, 3}, {4, 2}};
+ System.out.println(multi(trees[2], trees[2], trees[4]));
+ }
+
+ public int[][] outerTrees(int[][] trees) {
+ // 1. 找到最左边的一个点
+ int startX = 0;
+ int startY = 0;
+ for (int[] tree : trees) {
+ int x = tree[0];
+ int y = tree[1];
+ if (x < startX) {
+ startX = x;
+ startY = y;
+ }
+ }
+ // 2. 从最左边的一个点开始,寻找最大角度的点的连线
+ return null;
+ }
+
+ static int[][] sort(int[][] trees) {
+ return trees;
+ }
+
+ //计算叉积,p1,p2,p0都为点
+ static double multi(int[] p1, int[] p2, int[] p0) {
+ double x1, y1, x2, y2;
+ x1 = p1[0] - p0[0];
+ y1 = p1[1] - p0[1];
+ x2 = p2[0] - p0[0];
+ y2 = p2[1] - p0[1];
+ return x1 * y2 - x2 * y1;
+ }
+
+}
diff --git a/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode824_ToGoatLatin.java b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode824_ToGoatLatin.java
index 43a4c12..dbe5e05 100644
--- a/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode824_ToGoatLatin.java
+++ b/leetcode/src/main/java/com/wdbyte/leetcode/LeetCode824_ToGoatLatin.java
@@ -4,7 +4,7 @@
* https://leetcode-cn.com/problems/goat-latin/
* 824. 山羊拉丁文
*
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2022/04/21
*/
public class LeetCode824_ToGoatLatin {
From ddce4729b86b5257a620496a55b0bb610d70f8b9 Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Tue, 16 May 2023 16:11:56 +0800
Subject: [PATCH 52/93] update HotCode.java
---
.../main/java/com/wdbyte/hotcode/HotCode.java | 51 ++++++++++++++++++-
1 file changed, 50 insertions(+), 1 deletion(-)
diff --git a/tool-java-hotcode/src/main/java/com/wdbyte/hotcode/HotCode.java b/tool-java-hotcode/src/main/java/com/wdbyte/hotcode/HotCode.java
index 0750444..0838ffb 100644
--- a/tool-java-hotcode/src/main/java/com/wdbyte/hotcode/HotCode.java
+++ b/tool-java-hotcode/src/main/java/com/wdbyte/hotcode/HotCode.java
@@ -1,6 +1,9 @@
package com.wdbyte.hotcode;
+import java.io.IOException;
import java.math.BigDecimal;
+import java.nio.file.Files;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
@@ -9,7 +12,7 @@
/**
*
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/02/20
*/
public class HotCode {
@@ -33,6 +36,10 @@ public static void main(String[] args) {
thread();
// 运行缓慢的方法
runSlowThread();
+ // 读取文件
+ readFile();
+ // 抛出异常
+ exceMethod();
}
/**
@@ -104,6 +111,7 @@ private static void deadThread() {
System.out.println(Thread.currentThread() + " get ResourceB");
try {
Thread.sleep(1000);
+
} catch (InterruptedException e) {
e.printStackTrace();
}
@@ -194,4 +202,45 @@ public static void slow2() throws InterruptedException {
System.out.println(count);
}
+ /**
+ * 不断读取文件
+ */
+ public static void readFile(){
+ new Thread(() -> {
+ Thread.currentThread().setName("read_file_method");
+ while (true){
+ try {
+ byte[] bytes = Files.readAllBytes(Paths.get("/Users/darcy/Downloads/info.txt"));
+ System.out.println(bytes.length);
+ Thread.sleep(100);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ }).start();
+ }
+
+ /**
+ * 不断抛出异常
+ */
+ public static void exceMethod() {
+ new Thread(() -> {
+ Thread.currentThread().setName("exce_method");
+ while (true) {
+ try {
+ System.out.println(exce(0));
+ Thread.sleep(200);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }).start();
+ }
+
+ public static int exce(int a){
+ return 10/a;
+ }
+
}
From 9717e5a6c7c0927b5e6c17f0921670753550ab0d Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Tue, 16 May 2023 16:25:04 +0800
Subject: [PATCH 53/93] feat: protobuf code
---
tool-java-protobuf/pom.xml | 1 +
.../com/wdbyte/tool/protos/AddressBook.java | 725 ++++++
.../tool/protos/AddressBookOrBuilder.java | 33 +
.../wdbyte/tool/protos/AddressBookProtos.java | 79 +
.../java/com/wdbyte/tool/protos/Person.java | 1942 +++++++++++++++++
.../wdbyte/tool/protos/PersonOrBuilder.java | 78 +
.../wdbyte/tool/protos/StudentOuterClass.java | 770 +++++++
7 files changed, 3628 insertions(+)
create mode 100644 tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBook.java
create mode 100644 tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBookOrBuilder.java
create mode 100644 tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBookProtos.java
create mode 100644 tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/Person.java
create mode 100644 tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/PersonOrBuilder.java
create mode 100644 tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/StudentOuterClass.java
diff --git a/tool-java-protobuf/pom.xml b/tool-java-protobuf/pom.xml
index 36b0b7f..3c9725c 100644
--- a/tool-java-protobuf/pom.xml
+++ b/tool-java-protobuf/pom.xml
@@ -7,6 +7,7 @@
com.wdbyte
parent-modules
1.0.0-SNAPSHOT
+ ../pom.xml
tool-java-protobuf
diff --git a/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBook.java b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBook.java
new file mode 100644
index 0000000..e8e78be
--- /dev/null
+++ b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBook.java
@@ -0,0 +1,725 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: resources/addressbook.proto
+
+package com.wdbyte.tool.protos;
+
+/**
+ * Protobuf type {@code com.wdbyte.protobuf.AddressBook}
+ */
+public final class AddressBook extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:com.wdbyte.protobuf.AddressBook)
+ AddressBookOrBuilder {
+private static final long serialVersionUID = 0L;
+ // Use AddressBook.newBuilder() to construct.
+ private AddressBook(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private AddressBook() {
+ people_ = java.util.Collections.emptyList();
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new AddressBook();
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_AddressBook_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_AddressBook_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.wdbyte.tool.protos.AddressBook.class, com.wdbyte.tool.protos.AddressBook.Builder.class);
+ }
+
+ public static final int PEOPLE_FIELD_NUMBER = 1;
+ @SuppressWarnings("serial")
+ private java.util.List people_;
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ @java.lang.Override
+ public java.util.List getPeopleList() {
+ return people_;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ @java.lang.Override
+ public java.util.List extends com.wdbyte.tool.protos.PersonOrBuilder>
+ getPeopleOrBuilderList() {
+ return people_;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ @java.lang.Override
+ public int getPeopleCount() {
+ return people_.size();
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person getPeople(int index) {
+ return people_.get(index);
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ @java.lang.Override
+ public com.wdbyte.tool.protos.PersonOrBuilder getPeopleOrBuilder(
+ int index) {
+ return people_.get(index);
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ for (int i = 0; i < people_.size(); i++) {
+ output.writeMessage(1, people_.get(i));
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ for (int i = 0; i < people_.size(); i++) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(1, people_.get(i));
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.wdbyte.tool.protos.AddressBook)) {
+ return super.equals(obj);
+ }
+ com.wdbyte.tool.protos.AddressBook other = (com.wdbyte.tool.protos.AddressBook) obj;
+
+ if (!getPeopleList()
+ .equals(other.getPeopleList())) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (getPeopleCount() > 0) {
+ hash = (37 * hash) + PEOPLE_FIELD_NUMBER;
+ hash = (53 * hash) + getPeopleList().hashCode();
+ }
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.AddressBook parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(com.wdbyte.tool.protos.AddressBook prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code com.wdbyte.protobuf.AddressBook}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:com.wdbyte.protobuf.AddressBook)
+ com.wdbyte.tool.protos.AddressBookOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_AddressBook_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_AddressBook_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.wdbyte.tool.protos.AddressBook.class, com.wdbyte.tool.protos.AddressBook.Builder.class);
+ }
+
+ // Construct using com.wdbyte.tool.protos.AddressBook.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ bitField0_ = 0;
+ if (peopleBuilder_ == null) {
+ people_ = java.util.Collections.emptyList();
+ } else {
+ people_ = null;
+ peopleBuilder_.clear();
+ }
+ bitField0_ = (bitField0_ & ~0x00000001);
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_AddressBook_descriptor;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.AddressBook getDefaultInstanceForType() {
+ return com.wdbyte.tool.protos.AddressBook.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.AddressBook build() {
+ com.wdbyte.tool.protos.AddressBook result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.AddressBook buildPartial() {
+ com.wdbyte.tool.protos.AddressBook result = new com.wdbyte.tool.protos.AddressBook(this);
+ buildPartialRepeatedFields(result);
+ if (bitField0_ != 0) { buildPartial0(result); }
+ onBuilt();
+ return result;
+ }
+
+ private void buildPartialRepeatedFields(com.wdbyte.tool.protos.AddressBook result) {
+ if (peopleBuilder_ == null) {
+ if (((bitField0_ & 0x00000001) != 0)) {
+ people_ = java.util.Collections.unmodifiableList(people_);
+ bitField0_ = (bitField0_ & ~0x00000001);
+ }
+ result.people_ = people_;
+ } else {
+ result.people_ = peopleBuilder_.build();
+ }
+ }
+
+ private void buildPartial0(com.wdbyte.tool.protos.AddressBook result) {
+ int from_bitField0_ = bitField0_;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.wdbyte.tool.protos.AddressBook) {
+ return mergeFrom((com.wdbyte.tool.protos.AddressBook)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.wdbyte.tool.protos.AddressBook other) {
+ if (other == com.wdbyte.tool.protos.AddressBook.getDefaultInstance()) return this;
+ if (peopleBuilder_ == null) {
+ if (!other.people_.isEmpty()) {
+ if (people_.isEmpty()) {
+ people_ = other.people_;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ } else {
+ ensurePeopleIsMutable();
+ people_.addAll(other.people_);
+ }
+ onChanged();
+ }
+ } else {
+ if (!other.people_.isEmpty()) {
+ if (peopleBuilder_.isEmpty()) {
+ peopleBuilder_.dispose();
+ peopleBuilder_ = null;
+ people_ = other.people_;
+ bitField0_ = (bitField0_ & ~0x00000001);
+ peopleBuilder_ =
+ com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+ getPeopleFieldBuilder() : null;
+ } else {
+ peopleBuilder_.addAllMessages(other.people_);
+ }
+ }
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10: {
+ com.wdbyte.tool.protos.Person m =
+ input.readMessage(
+ com.wdbyte.tool.protos.Person.parser(),
+ extensionRegistry);
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ people_.add(m);
+ } else {
+ peopleBuilder_.addMessage(m);
+ }
+ break;
+ } // case 10
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+ private int bitField0_;
+
+ private java.util.List people_ =
+ java.util.Collections.emptyList();
+ private void ensurePeopleIsMutable() {
+ if (!((bitField0_ & 0x00000001) != 0)) {
+ people_ = new java.util.ArrayList(people_);
+ bitField0_ |= 0x00000001;
+ }
+ }
+
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ com.wdbyte.tool.protos.Person, com.wdbyte.tool.protos.Person.Builder, com.wdbyte.tool.protos.PersonOrBuilder> peopleBuilder_;
+
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public java.util.List getPeopleList() {
+ if (peopleBuilder_ == null) {
+ return java.util.Collections.unmodifiableList(people_);
+ } else {
+ return peopleBuilder_.getMessageList();
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public int getPeopleCount() {
+ if (peopleBuilder_ == null) {
+ return people_.size();
+ } else {
+ return peopleBuilder_.getCount();
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public com.wdbyte.tool.protos.Person getPeople(int index) {
+ if (peopleBuilder_ == null) {
+ return people_.get(index);
+ } else {
+ return peopleBuilder_.getMessage(index);
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public Builder setPeople(
+ int index, com.wdbyte.tool.protos.Person value) {
+ if (peopleBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePeopleIsMutable();
+ people_.set(index, value);
+ onChanged();
+ } else {
+ peopleBuilder_.setMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public Builder setPeople(
+ int index, com.wdbyte.tool.protos.Person.Builder builderForValue) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ people_.set(index, builderForValue.build());
+ onChanged();
+ } else {
+ peopleBuilder_.setMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public Builder addPeople(com.wdbyte.tool.protos.Person value) {
+ if (peopleBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePeopleIsMutable();
+ people_.add(value);
+ onChanged();
+ } else {
+ peopleBuilder_.addMessage(value);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public Builder addPeople(
+ int index, com.wdbyte.tool.protos.Person value) {
+ if (peopleBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePeopleIsMutable();
+ people_.add(index, value);
+ onChanged();
+ } else {
+ peopleBuilder_.addMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public Builder addPeople(
+ com.wdbyte.tool.protos.Person.Builder builderForValue) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ people_.add(builderForValue.build());
+ onChanged();
+ } else {
+ peopleBuilder_.addMessage(builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public Builder addPeople(
+ int index, com.wdbyte.tool.protos.Person.Builder builderForValue) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ people_.add(index, builderForValue.build());
+ onChanged();
+ } else {
+ peopleBuilder_.addMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public Builder addAllPeople(
+ java.lang.Iterable extends com.wdbyte.tool.protos.Person> values) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ com.google.protobuf.AbstractMessageLite.Builder.addAll(
+ values, people_);
+ onChanged();
+ } else {
+ peopleBuilder_.addAllMessages(values);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public Builder clearPeople() {
+ if (peopleBuilder_ == null) {
+ people_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ onChanged();
+ } else {
+ peopleBuilder_.clear();
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public Builder removePeople(int index) {
+ if (peopleBuilder_ == null) {
+ ensurePeopleIsMutable();
+ people_.remove(index);
+ onChanged();
+ } else {
+ peopleBuilder_.remove(index);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public com.wdbyte.tool.protos.Person.Builder getPeopleBuilder(
+ int index) {
+ return getPeopleFieldBuilder().getBuilder(index);
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public com.wdbyte.tool.protos.PersonOrBuilder getPeopleOrBuilder(
+ int index) {
+ if (peopleBuilder_ == null) {
+ return people_.get(index); } else {
+ return peopleBuilder_.getMessageOrBuilder(index);
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public java.util.List extends com.wdbyte.tool.protos.PersonOrBuilder>
+ getPeopleOrBuilderList() {
+ if (peopleBuilder_ != null) {
+ return peopleBuilder_.getMessageOrBuilderList();
+ } else {
+ return java.util.Collections.unmodifiableList(people_);
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public com.wdbyte.tool.protos.Person.Builder addPeopleBuilder() {
+ return getPeopleFieldBuilder().addBuilder(
+ com.wdbyte.tool.protos.Person.getDefaultInstance());
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public com.wdbyte.tool.protos.Person.Builder addPeopleBuilder(
+ int index) {
+ return getPeopleFieldBuilder().addBuilder(
+ index, com.wdbyte.tool.protos.Person.getDefaultInstance());
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ public java.util.List
+ getPeopleBuilderList() {
+ return getPeopleFieldBuilder().getBuilderList();
+ }
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ com.wdbyte.tool.protos.Person, com.wdbyte.tool.protos.Person.Builder, com.wdbyte.tool.protos.PersonOrBuilder>
+ getPeopleFieldBuilder() {
+ if (peopleBuilder_ == null) {
+ peopleBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+ com.wdbyte.tool.protos.Person, com.wdbyte.tool.protos.Person.Builder, com.wdbyte.tool.protos.PersonOrBuilder>(
+ people_,
+ ((bitField0_ & 0x00000001) != 0),
+ getParentForChildren(),
+ isClean());
+ people_ = null;
+ }
+ return peopleBuilder_;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:com.wdbyte.protobuf.AddressBook)
+ }
+
+ // @@protoc_insertion_point(class_scope:com.wdbyte.protobuf.AddressBook)
+ private static final com.wdbyte.tool.protos.AddressBook DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.wdbyte.tool.protos.AddressBook();
+ }
+
+ public static com.wdbyte.tool.protos.AddressBook getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public AddressBook parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.AddressBook getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+}
+
diff --git a/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBookOrBuilder.java b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBookOrBuilder.java
new file mode 100644
index 0000000..e0b5161
--- /dev/null
+++ b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBookOrBuilder.java
@@ -0,0 +1,33 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: resources/addressbook.proto
+
+package com.wdbyte.tool.protos;
+
+public interface AddressBookOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:com.wdbyte.protobuf.AddressBook)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ java.util.List
+ getPeopleList();
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ com.wdbyte.tool.protos.Person getPeople(int index);
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ int getPeopleCount();
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ java.util.List extends com.wdbyte.tool.protos.PersonOrBuilder>
+ getPeopleOrBuilderList();
+ /**
+ * repeated .com.wdbyte.protobuf.Person people = 1;
+ */
+ com.wdbyte.tool.protos.PersonOrBuilder getPeopleOrBuilder(
+ int index);
+}
diff --git a/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBookProtos.java b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBookProtos.java
new file mode 100644
index 0000000..e1c6788
--- /dev/null
+++ b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/AddressBookProtos.java
@@ -0,0 +1,79 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: resources/addressbook.proto
+
+package com.wdbyte.tool.protos;
+
+public final class AddressBookProtos {
+ private AddressBookProtos() {}
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions(
+ (com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+ static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_com_wdbyte_protobuf_Person_descriptor;
+ static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_com_wdbyte_protobuf_Person_fieldAccessorTable;
+ static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_com_wdbyte_protobuf_Person_PhoneNumber_descriptor;
+ static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_com_wdbyte_protobuf_Person_PhoneNumber_fieldAccessorTable;
+ static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_com_wdbyte_protobuf_AddressBook_descriptor;
+ static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_com_wdbyte_protobuf_AddressBook_fieldAccessorTable;
+
+ public static com.google.protobuf.Descriptors.FileDescriptor
+ getDescriptor() {
+ return descriptor;
+ }
+ private static com.google.protobuf.Descriptors.FileDescriptor
+ descriptor;
+ static {
+ java.lang.String[] descriptorData = {
+ "\n\033resources/addressbook.proto\022\023com.wdbyt" +
+ "e.protobuf\"\262\002\n\006Person\022\017\n\002id\030\001 \001(\005H\000\210\001\001\022\021" +
+ "\n\004name\030\002 \001(\tH\001\210\001\001\022\022\n\005email\030\003 \001(\tH\002\210\001\001\0227\n" +
+ "\006phones\030\004 \003(\0132\'.com.wdbyte.protobuf.Pers" +
+ "on.PhoneNumber\032p\n\013PhoneNumber\022\023\n\006number\030" +
+ "\001 \001(\tH\000\210\001\001\0228\n\004type\030\002 \001(\0162%.com.wdbyte.pr" +
+ "otobuf.Person.PhoneTypeH\001\210\001\001B\t\n\007_numberB" +
+ "\007\n\005_type\"+\n\tPhoneType\022\n\n\006MOBILE\020\000\022\010\n\004HOM" +
+ "E\020\001\022\010\n\004WORK\020\002B\005\n\003_idB\007\n\005_nameB\010\n\006_email\"" +
+ ":\n\013AddressBook\022+\n\006people\030\001 \003(\0132\033.com.wdb" +
+ "yte.protobuf.PersonB-\n\026com.wdbyte.tool.p" +
+ "rotosB\021AddressBookProtosP\001b\006proto3"
+ };
+ descriptor = com.google.protobuf.Descriptors.FileDescriptor
+ .internalBuildGeneratedFileFrom(descriptorData,
+ new com.google.protobuf.Descriptors.FileDescriptor[] {
+ });
+ internal_static_com_wdbyte_protobuf_Person_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_com_wdbyte_protobuf_Person_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_com_wdbyte_protobuf_Person_descriptor,
+ new java.lang.String[] { "Id", "Name", "Email", "Phones", "Id", "Name", "Email", });
+ internal_static_com_wdbyte_protobuf_Person_PhoneNumber_descriptor =
+ internal_static_com_wdbyte_protobuf_Person_descriptor.getNestedTypes().get(0);
+ internal_static_com_wdbyte_protobuf_Person_PhoneNumber_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_com_wdbyte_protobuf_Person_PhoneNumber_descriptor,
+ new java.lang.String[] { "Number", "Type", "Number", "Type", });
+ internal_static_com_wdbyte_protobuf_AddressBook_descriptor =
+ getDescriptor().getMessageTypes().get(1);
+ internal_static_com_wdbyte_protobuf_AddressBook_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_com_wdbyte_protobuf_AddressBook_descriptor,
+ new java.lang.String[] { "People", });
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
diff --git a/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/Person.java b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/Person.java
new file mode 100644
index 0000000..8ba2d40
--- /dev/null
+++ b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/Person.java
@@ -0,0 +1,1942 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: resources/addressbook.proto
+
+package com.wdbyte.tool.protos;
+
+/**
+ *
+ * 可选消息字段类型:bool int32 float double string
+ * 或者自定义消息类型,如下面的 PhoneNumber
+ * 修饰符:optional: 可选字段,
+ * 修饰符:repeated:可重复,如数组。
+ * 修饰符:required:必要字段,必须给值,否则会报错 RuntimeException,但是在 protobuf 版本 3 中被移除。
+ * 慎用 required,因为一旦被标记 requieds,以后将不能更改,否则可能会出问题。
+ *
+ *
+ * Protobuf type {@code com.wdbyte.protobuf.Person}
+ */
+public final class Person extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:com.wdbyte.protobuf.Person)
+ PersonOrBuilder {
+private static final long serialVersionUID = 0L;
+ // Use Person.newBuilder() to construct.
+ private Person(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private Person() {
+ name_ = "";
+ email_ = "";
+ phones_ = java.util.Collections.emptyList();
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new Person();
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.wdbyte.tool.protos.Person.class, com.wdbyte.tool.protos.Person.Builder.class);
+ }
+
+ /**
+ * Protobuf enum {@code com.wdbyte.protobuf.Person.PhoneType}
+ */
+ public enum PhoneType
+ implements com.google.protobuf.ProtocolMessageEnum {
+ /**
+ * MOBILE = 0;
+ */
+ MOBILE(0),
+ /**
+ * HOME = 1;
+ */
+ HOME(1),
+ /**
+ * WORK = 2;
+ */
+ WORK(2),
+ UNRECOGNIZED(-1),
+ ;
+
+ /**
+ * MOBILE = 0;
+ */
+ public static final int MOBILE_VALUE = 0;
+ /**
+ * HOME = 1;
+ */
+ public static final int HOME_VALUE = 1;
+ /**
+ * WORK = 2;
+ */
+ public static final int WORK_VALUE = 2;
+
+
+ public final int getNumber() {
+ if (this == UNRECOGNIZED) {
+ throw new java.lang.IllegalArgumentException(
+ "Can't get the number of an unknown enum value.");
+ }
+ return value;
+ }
+
+ /**
+ * @param value The numeric wire value of the corresponding enum entry.
+ * @return The enum associated with the given numeric wire value.
+ * @deprecated Use {@link #forNumber(int)} instead.
+ */
+ @java.lang.Deprecated
+ public static PhoneType valueOf(int value) {
+ return forNumber(value);
+ }
+
+ /**
+ * @param value The numeric wire value of the corresponding enum entry.
+ * @return The enum associated with the given numeric wire value.
+ */
+ public static PhoneType forNumber(int value) {
+ switch (value) {
+ case 0: return MOBILE;
+ case 1: return HOME;
+ case 2: return WORK;
+ default: return null;
+ }
+ }
+
+ public static com.google.protobuf.Internal.EnumLiteMap
+ internalGetValueMap() {
+ return internalValueMap;
+ }
+ private static final com.google.protobuf.Internal.EnumLiteMap<
+ PhoneType> internalValueMap =
+ new com.google.protobuf.Internal.EnumLiteMap() {
+ public PhoneType findValueByNumber(int number) {
+ return PhoneType.forNumber(number);
+ }
+ };
+
+ public final com.google.protobuf.Descriptors.EnumValueDescriptor
+ getValueDescriptor() {
+ if (this == UNRECOGNIZED) {
+ throw new java.lang.IllegalStateException(
+ "Can't get the descriptor of an unrecognized enum value.");
+ }
+ return getDescriptor().getValues().get(ordinal());
+ }
+ public final com.google.protobuf.Descriptors.EnumDescriptor
+ getDescriptorForType() {
+ return getDescriptor();
+ }
+ public static final com.google.protobuf.Descriptors.EnumDescriptor
+ getDescriptor() {
+ return com.wdbyte.tool.protos.Person.getDescriptor().getEnumTypes().get(0);
+ }
+
+ private static final PhoneType[] VALUES = values();
+
+ public static PhoneType valueOf(
+ com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
+ if (desc.getType() != getDescriptor()) {
+ throw new java.lang.IllegalArgumentException(
+ "EnumValueDescriptor is not for this type.");
+ }
+ if (desc.getIndex() == -1) {
+ return UNRECOGNIZED;
+ }
+ return VALUES[desc.getIndex()];
+ }
+
+ private final int value;
+
+ private PhoneType(int value) {
+ this.value = value;
+ }
+
+ // @@protoc_insertion_point(enum_scope:com.wdbyte.protobuf.Person.PhoneType)
+ }
+
+ public interface PhoneNumberOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:com.wdbyte.protobuf.Person.PhoneNumber)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * optional string number = 1;
+ * @return Whether the number field is set.
+ */
+ boolean hasNumber();
+ /**
+ * optional string number = 1;
+ * @return The number.
+ */
+ java.lang.String getNumber();
+ /**
+ * optional string number = 1;
+ * @return The bytes for number.
+ */
+ com.google.protobuf.ByteString
+ getNumberBytes();
+
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return Whether the type field is set.
+ */
+ boolean hasType();
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return The enum numeric value on the wire for type.
+ */
+ int getTypeValue();
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return The type.
+ */
+ com.wdbyte.tool.protos.Person.PhoneType getType();
+ }
+ /**
+ * Protobuf type {@code com.wdbyte.protobuf.Person.PhoneNumber}
+ */
+ public static final class PhoneNumber extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:com.wdbyte.protobuf.Person.PhoneNumber)
+ PhoneNumberOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use PhoneNumber.newBuilder() to construct.
+ private PhoneNumber(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private PhoneNumber() {
+ number_ = "";
+ type_ = 0;
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new PhoneNumber();
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_PhoneNumber_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_PhoneNumber_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.wdbyte.tool.protos.Person.PhoneNumber.class, com.wdbyte.tool.protos.Person.PhoneNumber.Builder.class);
+ }
+
+ private int bitField0_;
+ public static final int NUMBER_FIELD_NUMBER = 1;
+ @SuppressWarnings("serial")
+ private volatile java.lang.Object number_ = "";
+ /**
+ * optional string number = 1;
+ * @return Whether the number field is set.
+ */
+ @java.lang.Override
+ public boolean hasNumber() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+ /**
+ * optional string number = 1;
+ * @return The number.
+ */
+ @java.lang.Override
+ public java.lang.String getNumber() {
+ java.lang.Object ref = number_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ number_ = s;
+ return s;
+ }
+ }
+ /**
+ * optional string number = 1;
+ * @return The bytes for number.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString
+ getNumberBytes() {
+ java.lang.Object ref = number_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ number_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int TYPE_FIELD_NUMBER = 2;
+ private int type_ = 0;
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return Whether the type field is set.
+ */
+ @java.lang.Override public boolean hasType() {
+ return ((bitField0_ & 0x00000002) != 0);
+ }
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return The enum numeric value on the wire for type.
+ */
+ @java.lang.Override public int getTypeValue() {
+ return type_;
+ }
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return The type.
+ */
+ @java.lang.Override public com.wdbyte.tool.protos.Person.PhoneType getType() {
+ com.wdbyte.tool.protos.Person.PhoneType result = com.wdbyte.tool.protos.Person.PhoneType.forNumber(type_);
+ return result == null ? com.wdbyte.tool.protos.Person.PhoneType.UNRECOGNIZED : result;
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (((bitField0_ & 0x00000001) != 0)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 1, number_);
+ }
+ if (((bitField0_ & 0x00000002) != 0)) {
+ output.writeEnum(2, type_);
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (((bitField0_ & 0x00000001) != 0)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, number_);
+ }
+ if (((bitField0_ & 0x00000002) != 0)) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeEnumSize(2, type_);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.wdbyte.tool.protos.Person.PhoneNumber)) {
+ return super.equals(obj);
+ }
+ com.wdbyte.tool.protos.Person.PhoneNumber other = (com.wdbyte.tool.protos.Person.PhoneNumber) obj;
+
+ if (hasNumber() != other.hasNumber()) return false;
+ if (hasNumber()) {
+ if (!getNumber()
+ .equals(other.getNumber())) return false;
+ }
+ if (hasType() != other.hasType()) return false;
+ if (hasType()) {
+ if (type_ != other.type_) return false;
+ }
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (hasNumber()) {
+ hash = (37 * hash) + NUMBER_FIELD_NUMBER;
+ hash = (53 * hash) + getNumber().hashCode();
+ }
+ if (hasType()) {
+ hash = (37 * hash) + TYPE_FIELD_NUMBER;
+ hash = (53 * hash) + type_;
+ }
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.Person.PhoneNumber parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(com.wdbyte.tool.protos.Person.PhoneNumber prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code com.wdbyte.protobuf.Person.PhoneNumber}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:com.wdbyte.protobuf.Person.PhoneNumber)
+ com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_PhoneNumber_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_PhoneNumber_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.wdbyte.tool.protos.Person.PhoneNumber.class, com.wdbyte.tool.protos.Person.PhoneNumber.Builder.class);
+ }
+
+ // Construct using com.wdbyte.tool.protos.Person.PhoneNumber.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ bitField0_ = 0;
+ number_ = "";
+ type_ = 0;
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_PhoneNumber_descriptor;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person.PhoneNumber getDefaultInstanceForType() {
+ return com.wdbyte.tool.protos.Person.PhoneNumber.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person.PhoneNumber build() {
+ com.wdbyte.tool.protos.Person.PhoneNumber result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person.PhoneNumber buildPartial() {
+ com.wdbyte.tool.protos.Person.PhoneNumber result = new com.wdbyte.tool.protos.Person.PhoneNumber(this);
+ if (bitField0_ != 0) { buildPartial0(result); }
+ onBuilt();
+ return result;
+ }
+
+ private void buildPartial0(com.wdbyte.tool.protos.Person.PhoneNumber result) {
+ int from_bitField0_ = bitField0_;
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000001) != 0)) {
+ result.number_ = number_;
+ to_bitField0_ |= 0x00000001;
+ }
+ if (((from_bitField0_ & 0x00000002) != 0)) {
+ result.type_ = type_;
+ to_bitField0_ |= 0x00000002;
+ }
+ result.bitField0_ |= to_bitField0_;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.wdbyte.tool.protos.Person.PhoneNumber) {
+ return mergeFrom((com.wdbyte.tool.protos.Person.PhoneNumber)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.wdbyte.tool.protos.Person.PhoneNumber other) {
+ if (other == com.wdbyte.tool.protos.Person.PhoneNumber.getDefaultInstance()) return this;
+ if (other.hasNumber()) {
+ number_ = other.number_;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ }
+ if (other.hasType()) {
+ setType(other.getType());
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10: {
+ number_ = input.readStringRequireUtf8();
+ bitField0_ |= 0x00000001;
+ break;
+ } // case 10
+ case 16: {
+ type_ = input.readEnum();
+ bitField0_ |= 0x00000002;
+ break;
+ } // case 16
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+ private int bitField0_;
+
+ private java.lang.Object number_ = "";
+ /**
+ * optional string number = 1;
+ * @return Whether the number field is set.
+ */
+ public boolean hasNumber() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+ /**
+ * optional string number = 1;
+ * @return The number.
+ */
+ public java.lang.String getNumber() {
+ java.lang.Object ref = number_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ number_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * optional string number = 1;
+ * @return The bytes for number.
+ */
+ public com.google.protobuf.ByteString
+ getNumberBytes() {
+ java.lang.Object ref = number_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ number_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * optional string number = 1;
+ * @param value The number to set.
+ * @return This builder for chaining.
+ */
+ public Builder setNumber(
+ java.lang.String value) {
+ if (value == null) { throw new NullPointerException(); }
+ number_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string number = 1;
+ * @return This builder for chaining.
+ */
+ public Builder clearNumber() {
+ number_ = getDefaultInstance().getNumber();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string number = 1;
+ * @param value The bytes for number to set.
+ * @return This builder for chaining.
+ */
+ public Builder setNumberBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) { throw new NullPointerException(); }
+ checkByteStringIsUtf8(value);
+ number_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+
+ private int type_ = 0;
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return Whether the type field is set.
+ */
+ @java.lang.Override public boolean hasType() {
+ return ((bitField0_ & 0x00000002) != 0);
+ }
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return The enum numeric value on the wire for type.
+ */
+ @java.lang.Override public int getTypeValue() {
+ return type_;
+ }
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @param value The enum numeric value on the wire for type to set.
+ * @return This builder for chaining.
+ */
+ public Builder setTypeValue(int value) {
+ type_ = value;
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return The type.
+ */
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person.PhoneType getType() {
+ com.wdbyte.tool.protos.Person.PhoneType result = com.wdbyte.tool.protos.Person.PhoneType.forNumber(type_);
+ return result == null ? com.wdbyte.tool.protos.Person.PhoneType.UNRECOGNIZED : result;
+ }
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @param value The type to set.
+ * @return This builder for chaining.
+ */
+ public Builder setType(com.wdbyte.tool.protos.Person.PhoneType value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ bitField0_ |= 0x00000002;
+ type_ = value.getNumber();
+ onChanged();
+ return this;
+ }
+ /**
+ * optional .com.wdbyte.protobuf.Person.PhoneType type = 2;
+ * @return This builder for chaining.
+ */
+ public Builder clearType() {
+ bitField0_ = (bitField0_ & ~0x00000002);
+ type_ = 0;
+ onChanged();
+ return this;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:com.wdbyte.protobuf.Person.PhoneNumber)
+ }
+
+ // @@protoc_insertion_point(class_scope:com.wdbyte.protobuf.Person.PhoneNumber)
+ private static final com.wdbyte.tool.protos.Person.PhoneNumber DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.wdbyte.tool.protos.Person.PhoneNumber();
+ }
+
+ public static com.wdbyte.tool.protos.Person.PhoneNumber getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public PhoneNumber parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person.PhoneNumber getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private int bitField0_;
+ public static final int ID_FIELD_NUMBER = 1;
+ private int id_ = 0;
+ /**
+ * optional int32 id = 1;
+ * @return Whether the id field is set.
+ */
+ @java.lang.Override
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+ /**
+ * optional int32 id = 1;
+ * @return The id.
+ */
+ @java.lang.Override
+ public int getId() {
+ return id_;
+ }
+
+ public static final int NAME_FIELD_NUMBER = 2;
+ @SuppressWarnings("serial")
+ private volatile java.lang.Object name_ = "";
+ /**
+ * optional string name = 2;
+ * @return Whether the name field is set.
+ */
+ @java.lang.Override
+ public boolean hasName() {
+ return ((bitField0_ & 0x00000002) != 0);
+ }
+ /**
+ * optional string name = 2;
+ * @return The name.
+ */
+ @java.lang.Override
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ name_ = s;
+ return s;
+ }
+ }
+ /**
+ * optional string name = 2;
+ * @return The bytes for name.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString
+ getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int EMAIL_FIELD_NUMBER = 3;
+ @SuppressWarnings("serial")
+ private volatile java.lang.Object email_ = "";
+ /**
+ * optional string email = 3;
+ * @return Whether the email field is set.
+ */
+ @java.lang.Override
+ public boolean hasEmail() {
+ return ((bitField0_ & 0x00000004) != 0);
+ }
+ /**
+ * optional string email = 3;
+ * @return The email.
+ */
+ @java.lang.Override
+ public java.lang.String getEmail() {
+ java.lang.Object ref = email_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ email_ = s;
+ return s;
+ }
+ }
+ /**
+ * optional string email = 3;
+ * @return The bytes for email.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString
+ getEmailBytes() {
+ java.lang.Object ref = email_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ email_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int PHONES_FIELD_NUMBER = 4;
+ @SuppressWarnings("serial")
+ private java.util.List phones_;
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ @java.lang.Override
+ public java.util.List getPhonesList() {
+ return phones_;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ @java.lang.Override
+ public java.util.List extends com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder>
+ getPhonesOrBuilderList() {
+ return phones_;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ @java.lang.Override
+ public int getPhonesCount() {
+ return phones_.size();
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person.PhoneNumber getPhones(int index) {
+ return phones_.get(index);
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder getPhonesOrBuilder(
+ int index) {
+ return phones_.get(index);
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (((bitField0_ & 0x00000001) != 0)) {
+ output.writeInt32(1, id_);
+ }
+ if (((bitField0_ & 0x00000002) != 0)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+ }
+ if (((bitField0_ & 0x00000004) != 0)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 3, email_);
+ }
+ for (int i = 0; i < phones_.size(); i++) {
+ output.writeMessage(4, phones_.get(i));
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (((bitField0_ & 0x00000001) != 0)) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeInt32Size(1, id_);
+ }
+ if (((bitField0_ & 0x00000002) != 0)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+ }
+ if (((bitField0_ & 0x00000004) != 0)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, email_);
+ }
+ for (int i = 0; i < phones_.size(); i++) {
+ size += com.google.protobuf.CodedOutputStream
+ .computeMessageSize(4, phones_.get(i));
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.wdbyte.tool.protos.Person)) {
+ return super.equals(obj);
+ }
+ com.wdbyte.tool.protos.Person other = (com.wdbyte.tool.protos.Person) obj;
+
+ if (hasId() != other.hasId()) return false;
+ if (hasId()) {
+ if (getId()
+ != other.getId()) return false;
+ }
+ if (hasName() != other.hasName()) return false;
+ if (hasName()) {
+ if (!getName()
+ .equals(other.getName())) return false;
+ }
+ if (hasEmail() != other.hasEmail()) return false;
+ if (hasEmail()) {
+ if (!getEmail()
+ .equals(other.getEmail())) return false;
+ }
+ if (!getPhonesList()
+ .equals(other.getPhonesList())) return false;
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (hasId()) {
+ hash = (37 * hash) + ID_FIELD_NUMBER;
+ hash = (53 * hash) + getId();
+ }
+ if (hasName()) {
+ hash = (37 * hash) + NAME_FIELD_NUMBER;
+ hash = (53 * hash) + getName().hashCode();
+ }
+ if (hasEmail()) {
+ hash = (37 * hash) + EMAIL_FIELD_NUMBER;
+ hash = (53 * hash) + getEmail().hashCode();
+ }
+ if (getPhonesCount() > 0) {
+ hash = (37 * hash) + PHONES_FIELD_NUMBER;
+ hash = (53 * hash) + getPhonesList().hashCode();
+ }
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.wdbyte.tool.protos.Person parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.Person parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.Person parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.Person parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.Person parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.Person parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.Person parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.Person parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(com.wdbyte.tool.protos.Person prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ *
+ * 可选消息字段类型:bool int32 float double string
+ * 或者自定义消息类型,如下面的 PhoneNumber
+ * 修饰符:optional: 可选字段,
+ * 修饰符:repeated:可重复,如数组。
+ * 修饰符:required:必要字段,必须给值,否则会报错 RuntimeException,但是在 protobuf 版本 3 中被移除。
+ * 慎用 required,因为一旦被标记 requieds,以后将不能更改,否则可能会出问题。
+ *
+ *
+ * Protobuf type {@code com.wdbyte.protobuf.Person}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:com.wdbyte.protobuf.Person)
+ com.wdbyte.tool.protos.PersonOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.wdbyte.tool.protos.Person.class, com.wdbyte.tool.protos.Person.Builder.class);
+ }
+
+ // Construct using com.wdbyte.tool.protos.Person.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ bitField0_ = 0;
+ id_ = 0;
+ name_ = "";
+ email_ = "";
+ if (phonesBuilder_ == null) {
+ phones_ = java.util.Collections.emptyList();
+ } else {
+ phones_ = null;
+ phonesBuilder_.clear();
+ }
+ bitField0_ = (bitField0_ & ~0x00000008);
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return com.wdbyte.tool.protos.AddressBookProtos.internal_static_com_wdbyte_protobuf_Person_descriptor;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person getDefaultInstanceForType() {
+ return com.wdbyte.tool.protos.Person.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person build() {
+ com.wdbyte.tool.protos.Person result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person buildPartial() {
+ com.wdbyte.tool.protos.Person result = new com.wdbyte.tool.protos.Person(this);
+ buildPartialRepeatedFields(result);
+ if (bitField0_ != 0) { buildPartial0(result); }
+ onBuilt();
+ return result;
+ }
+
+ private void buildPartialRepeatedFields(com.wdbyte.tool.protos.Person result) {
+ if (phonesBuilder_ == null) {
+ if (((bitField0_ & 0x00000008) != 0)) {
+ phones_ = java.util.Collections.unmodifiableList(phones_);
+ bitField0_ = (bitField0_ & ~0x00000008);
+ }
+ result.phones_ = phones_;
+ } else {
+ result.phones_ = phonesBuilder_.build();
+ }
+ }
+
+ private void buildPartial0(com.wdbyte.tool.protos.Person result) {
+ int from_bitField0_ = bitField0_;
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000001) != 0)) {
+ result.id_ = id_;
+ to_bitField0_ |= 0x00000001;
+ }
+ if (((from_bitField0_ & 0x00000002) != 0)) {
+ result.name_ = name_;
+ to_bitField0_ |= 0x00000002;
+ }
+ if (((from_bitField0_ & 0x00000004) != 0)) {
+ result.email_ = email_;
+ to_bitField0_ |= 0x00000004;
+ }
+ result.bitField0_ |= to_bitField0_;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.wdbyte.tool.protos.Person) {
+ return mergeFrom((com.wdbyte.tool.protos.Person)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.wdbyte.tool.protos.Person other) {
+ if (other == com.wdbyte.tool.protos.Person.getDefaultInstance()) return this;
+ if (other.hasId()) {
+ setId(other.getId());
+ }
+ if (other.hasName()) {
+ name_ = other.name_;
+ bitField0_ |= 0x00000002;
+ onChanged();
+ }
+ if (other.hasEmail()) {
+ email_ = other.email_;
+ bitField0_ |= 0x00000004;
+ onChanged();
+ }
+ if (phonesBuilder_ == null) {
+ if (!other.phones_.isEmpty()) {
+ if (phones_.isEmpty()) {
+ phones_ = other.phones_;
+ bitField0_ = (bitField0_ & ~0x00000008);
+ } else {
+ ensurePhonesIsMutable();
+ phones_.addAll(other.phones_);
+ }
+ onChanged();
+ }
+ } else {
+ if (!other.phones_.isEmpty()) {
+ if (phonesBuilder_.isEmpty()) {
+ phonesBuilder_.dispose();
+ phonesBuilder_ = null;
+ phones_ = other.phones_;
+ bitField0_ = (bitField0_ & ~0x00000008);
+ phonesBuilder_ =
+ com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+ getPhonesFieldBuilder() : null;
+ } else {
+ phonesBuilder_.addAllMessages(other.phones_);
+ }
+ }
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 8: {
+ id_ = input.readInt32();
+ bitField0_ |= 0x00000001;
+ break;
+ } // case 8
+ case 18: {
+ name_ = input.readStringRequireUtf8();
+ bitField0_ |= 0x00000002;
+ break;
+ } // case 18
+ case 26: {
+ email_ = input.readStringRequireUtf8();
+ bitField0_ |= 0x00000004;
+ break;
+ } // case 26
+ case 34: {
+ com.wdbyte.tool.protos.Person.PhoneNumber m =
+ input.readMessage(
+ com.wdbyte.tool.protos.Person.PhoneNumber.parser(),
+ extensionRegistry);
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ phones_.add(m);
+ } else {
+ phonesBuilder_.addMessage(m);
+ }
+ break;
+ } // case 34
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+ private int bitField0_;
+
+ private int id_ ;
+ /**
+ * optional int32 id = 1;
+ * @return Whether the id field is set.
+ */
+ @java.lang.Override
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+ /**
+ * optional int32 id = 1;
+ * @return The id.
+ */
+ @java.lang.Override
+ public int getId() {
+ return id_;
+ }
+ /**
+ * optional int32 id = 1;
+ * @param value The id to set.
+ * @return This builder for chaining.
+ */
+ public Builder setId(int value) {
+
+ id_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+ /**
+ * optional int32 id = 1;
+ * @return This builder for chaining.
+ */
+ public Builder clearId() {
+ bitField0_ = (bitField0_ & ~0x00000001);
+ id_ = 0;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object name_ = "";
+ /**
+ * optional string name = 2;
+ * @return Whether the name field is set.
+ */
+ public boolean hasName() {
+ return ((bitField0_ & 0x00000002) != 0);
+ }
+ /**
+ * optional string name = 2;
+ * @return The name.
+ */
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ name_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * optional string name = 2;
+ * @return The bytes for name.
+ */
+ public com.google.protobuf.ByteString
+ getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * optional string name = 2;
+ * @param value The name to set.
+ * @return This builder for chaining.
+ */
+ public Builder setName(
+ java.lang.String value) {
+ if (value == null) { throw new NullPointerException(); }
+ name_ = value;
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string name = 2;
+ * @return This builder for chaining.
+ */
+ public Builder clearName() {
+ name_ = getDefaultInstance().getName();
+ bitField0_ = (bitField0_ & ~0x00000002);
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string name = 2;
+ * @param value The bytes for name to set.
+ * @return This builder for chaining.
+ */
+ public Builder setNameBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) { throw new NullPointerException(); }
+ checkByteStringIsUtf8(value);
+ name_ = value;
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object email_ = "";
+ /**
+ * optional string email = 3;
+ * @return Whether the email field is set.
+ */
+ public boolean hasEmail() {
+ return ((bitField0_ & 0x00000004) != 0);
+ }
+ /**
+ * optional string email = 3;
+ * @return The email.
+ */
+ public java.lang.String getEmail() {
+ java.lang.Object ref = email_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ email_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * optional string email = 3;
+ * @return The bytes for email.
+ */
+ public com.google.protobuf.ByteString
+ getEmailBytes() {
+ java.lang.Object ref = email_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ email_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * optional string email = 3;
+ * @param value The email to set.
+ * @return This builder for chaining.
+ */
+ public Builder setEmail(
+ java.lang.String value) {
+ if (value == null) { throw new NullPointerException(); }
+ email_ = value;
+ bitField0_ |= 0x00000004;
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string email = 3;
+ * @return This builder for chaining.
+ */
+ public Builder clearEmail() {
+ email_ = getDefaultInstance().getEmail();
+ bitField0_ = (bitField0_ & ~0x00000004);
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string email = 3;
+ * @param value The bytes for email to set.
+ * @return This builder for chaining.
+ */
+ public Builder setEmailBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) { throw new NullPointerException(); }
+ checkByteStringIsUtf8(value);
+ email_ = value;
+ bitField0_ |= 0x00000004;
+ onChanged();
+ return this;
+ }
+
+ private java.util.List phones_ =
+ java.util.Collections.emptyList();
+ private void ensurePhonesIsMutable() {
+ if (!((bitField0_ & 0x00000008) != 0)) {
+ phones_ = new java.util.ArrayList(phones_);
+ bitField0_ |= 0x00000008;
+ }
+ }
+
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ com.wdbyte.tool.protos.Person.PhoneNumber, com.wdbyte.tool.protos.Person.PhoneNumber.Builder, com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder> phonesBuilder_;
+
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public java.util.List getPhonesList() {
+ if (phonesBuilder_ == null) {
+ return java.util.Collections.unmodifiableList(phones_);
+ } else {
+ return phonesBuilder_.getMessageList();
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public int getPhonesCount() {
+ if (phonesBuilder_ == null) {
+ return phones_.size();
+ } else {
+ return phonesBuilder_.getCount();
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public com.wdbyte.tool.protos.Person.PhoneNumber getPhones(int index) {
+ if (phonesBuilder_ == null) {
+ return phones_.get(index);
+ } else {
+ return phonesBuilder_.getMessage(index);
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder setPhones(
+ int index, com.wdbyte.tool.protos.Person.PhoneNumber value) {
+ if (phonesBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePhonesIsMutable();
+ phones_.set(index, value);
+ onChanged();
+ } else {
+ phonesBuilder_.setMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder setPhones(
+ int index, com.wdbyte.tool.protos.Person.PhoneNumber.Builder builderForValue) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ phones_.set(index, builderForValue.build());
+ onChanged();
+ } else {
+ phonesBuilder_.setMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addPhones(com.wdbyte.tool.protos.Person.PhoneNumber value) {
+ if (phonesBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePhonesIsMutable();
+ phones_.add(value);
+ onChanged();
+ } else {
+ phonesBuilder_.addMessage(value);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addPhones(
+ int index, com.wdbyte.tool.protos.Person.PhoneNumber value) {
+ if (phonesBuilder_ == null) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ ensurePhonesIsMutable();
+ phones_.add(index, value);
+ onChanged();
+ } else {
+ phonesBuilder_.addMessage(index, value);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addPhones(
+ com.wdbyte.tool.protos.Person.PhoneNumber.Builder builderForValue) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ phones_.add(builderForValue.build());
+ onChanged();
+ } else {
+ phonesBuilder_.addMessage(builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addPhones(
+ int index, com.wdbyte.tool.protos.Person.PhoneNumber.Builder builderForValue) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ phones_.add(index, builderForValue.build());
+ onChanged();
+ } else {
+ phonesBuilder_.addMessage(index, builderForValue.build());
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder addAllPhones(
+ java.lang.Iterable extends com.wdbyte.tool.protos.Person.PhoneNumber> values) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ com.google.protobuf.AbstractMessageLite.Builder.addAll(
+ values, phones_);
+ onChanged();
+ } else {
+ phonesBuilder_.addAllMessages(values);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder clearPhones() {
+ if (phonesBuilder_ == null) {
+ phones_ = java.util.Collections.emptyList();
+ bitField0_ = (bitField0_ & ~0x00000008);
+ onChanged();
+ } else {
+ phonesBuilder_.clear();
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public Builder removePhones(int index) {
+ if (phonesBuilder_ == null) {
+ ensurePhonesIsMutable();
+ phones_.remove(index);
+ onChanged();
+ } else {
+ phonesBuilder_.remove(index);
+ }
+ return this;
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public com.wdbyte.tool.protos.Person.PhoneNumber.Builder getPhonesBuilder(
+ int index) {
+ return getPhonesFieldBuilder().getBuilder(index);
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder getPhonesOrBuilder(
+ int index) {
+ if (phonesBuilder_ == null) {
+ return phones_.get(index); } else {
+ return phonesBuilder_.getMessageOrBuilder(index);
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public java.util.List extends com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder>
+ getPhonesOrBuilderList() {
+ if (phonesBuilder_ != null) {
+ return phonesBuilder_.getMessageOrBuilderList();
+ } else {
+ return java.util.Collections.unmodifiableList(phones_);
+ }
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public com.wdbyte.tool.protos.Person.PhoneNumber.Builder addPhonesBuilder() {
+ return getPhonesFieldBuilder().addBuilder(
+ com.wdbyte.tool.protos.Person.PhoneNumber.getDefaultInstance());
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public com.wdbyte.tool.protos.Person.PhoneNumber.Builder addPhonesBuilder(
+ int index) {
+ return getPhonesFieldBuilder().addBuilder(
+ index, com.wdbyte.tool.protos.Person.PhoneNumber.getDefaultInstance());
+ }
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ public java.util.List
+ getPhonesBuilderList() {
+ return getPhonesFieldBuilder().getBuilderList();
+ }
+ private com.google.protobuf.RepeatedFieldBuilderV3<
+ com.wdbyte.tool.protos.Person.PhoneNumber, com.wdbyte.tool.protos.Person.PhoneNumber.Builder, com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder>
+ getPhonesFieldBuilder() {
+ if (phonesBuilder_ == null) {
+ phonesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+ com.wdbyte.tool.protos.Person.PhoneNumber, com.wdbyte.tool.protos.Person.PhoneNumber.Builder, com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder>(
+ phones_,
+ ((bitField0_ & 0x00000008) != 0),
+ getParentForChildren(),
+ isClean());
+ phones_ = null;
+ }
+ return phonesBuilder_;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:com.wdbyte.protobuf.Person)
+ }
+
+ // @@protoc_insertion_point(class_scope:com.wdbyte.protobuf.Person)
+ private static final com.wdbyte.tool.protos.Person DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.wdbyte.tool.protos.Person();
+ }
+
+ public static com.wdbyte.tool.protos.Person getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public Person parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.Person getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+}
+
diff --git a/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/PersonOrBuilder.java b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/PersonOrBuilder.java
new file mode 100644
index 0000000..6cfb178
--- /dev/null
+++ b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/PersonOrBuilder.java
@@ -0,0 +1,78 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: resources/addressbook.proto
+
+package com.wdbyte.tool.protos;
+
+public interface PersonOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:com.wdbyte.protobuf.Person)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * optional int32 id = 1;
+ * @return Whether the id field is set.
+ */
+ boolean hasId();
+ /**
+ * optional int32 id = 1;
+ * @return The id.
+ */
+ int getId();
+
+ /**
+ * optional string name = 2;
+ * @return Whether the name field is set.
+ */
+ boolean hasName();
+ /**
+ * optional string name = 2;
+ * @return The name.
+ */
+ java.lang.String getName();
+ /**
+ * optional string name = 2;
+ * @return The bytes for name.
+ */
+ com.google.protobuf.ByteString
+ getNameBytes();
+
+ /**
+ * optional string email = 3;
+ * @return Whether the email field is set.
+ */
+ boolean hasEmail();
+ /**
+ * optional string email = 3;
+ * @return The email.
+ */
+ java.lang.String getEmail();
+ /**
+ * optional string email = 3;
+ * @return The bytes for email.
+ */
+ com.google.protobuf.ByteString
+ getEmailBytes();
+
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ java.util.List
+ getPhonesList();
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ com.wdbyte.tool.protos.Person.PhoneNumber getPhones(int index);
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ int getPhonesCount();
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ java.util.List extends com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder>
+ getPhonesOrBuilderList();
+ /**
+ * repeated .com.wdbyte.protobuf.Person.PhoneNumber phones = 4;
+ */
+ com.wdbyte.tool.protos.Person.PhoneNumberOrBuilder getPhonesOrBuilder(
+ int index);
+}
diff --git a/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/StudentOuterClass.java b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/StudentOuterClass.java
new file mode 100644
index 0000000..c8c29e2
--- /dev/null
+++ b/tool-java-protobuf/src/main/java/com/wdbyte/tool/protos/StudentOuterClass.java
@@ -0,0 +1,770 @@
+// Generated by the protocol buffer compiler. DO NOT EDIT!
+// source: resources/student.proto
+
+package com.wdbyte.tool.protos;
+
+public final class StudentOuterClass {
+ private StudentOuterClass() {}
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistryLite registry) {
+ }
+
+ public static void registerAllExtensions(
+ com.google.protobuf.ExtensionRegistry registry) {
+ registerAllExtensions(
+ (com.google.protobuf.ExtensionRegistryLite) registry);
+ }
+ public interface StudentOrBuilder extends
+ // @@protoc_insertion_point(interface_extends:com.wdbyte.protobuf.Student)
+ com.google.protobuf.MessageOrBuilder {
+
+ /**
+ * optional string id = 1;
+ * @return Whether the id field is set.
+ */
+ boolean hasId();
+ /**
+ * optional string id = 1;
+ * @return The id.
+ */
+ java.lang.String getId();
+ /**
+ * optional string id = 1;
+ * @return The bytes for id.
+ */
+ com.google.protobuf.ByteString
+ getIdBytes();
+
+ /**
+ * optional string name = 2;
+ * @return Whether the name field is set.
+ */
+ boolean hasName();
+ /**
+ * optional string name = 2;
+ * @return The name.
+ */
+ java.lang.String getName();
+ /**
+ * optional string name = 2;
+ * @return The bytes for name.
+ */
+ com.google.protobuf.ByteString
+ getNameBytes();
+ }
+ /**
+ * Protobuf type {@code com.wdbyte.protobuf.Student}
+ */
+ public static final class Student extends
+ com.google.protobuf.GeneratedMessageV3 implements
+ // @@protoc_insertion_point(message_implements:com.wdbyte.protobuf.Student)
+ StudentOrBuilder {
+ private static final long serialVersionUID = 0L;
+ // Use Student.newBuilder() to construct.
+ private Student(com.google.protobuf.GeneratedMessageV3.Builder> builder) {
+ super(builder);
+ }
+ private Student() {
+ id_ = "";
+ name_ = "";
+ }
+
+ @java.lang.Override
+ @SuppressWarnings({"unused"})
+ protected java.lang.Object newInstance(
+ UnusedPrivateParameter unused) {
+ return new Student();
+ }
+
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.wdbyte.tool.protos.StudentOuterClass.internal_static_com_wdbyte_protobuf_Student_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.wdbyte.tool.protos.StudentOuterClass.internal_static_com_wdbyte_protobuf_Student_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.wdbyte.tool.protos.StudentOuterClass.Student.class, com.wdbyte.tool.protos.StudentOuterClass.Student.Builder.class);
+ }
+
+ private int bitField0_;
+ public static final int ID_FIELD_NUMBER = 1;
+ @SuppressWarnings("serial")
+ private volatile java.lang.Object id_ = "";
+ /**
+ * optional string id = 1;
+ * @return Whether the id field is set.
+ */
+ @java.lang.Override
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+ /**
+ * optional string id = 1;
+ * @return The id.
+ */
+ @java.lang.Override
+ public java.lang.String getId() {
+ java.lang.Object ref = id_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ id_ = s;
+ return s;
+ }
+ }
+ /**
+ * optional string id = 1;
+ * @return The bytes for id.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString
+ getIdBytes() {
+ java.lang.Object ref = id_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ id_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ public static final int NAME_FIELD_NUMBER = 2;
+ @SuppressWarnings("serial")
+ private volatile java.lang.Object name_ = "";
+ /**
+ * optional string name = 2;
+ * @return Whether the name field is set.
+ */
+ @java.lang.Override
+ public boolean hasName() {
+ return ((bitField0_ & 0x00000002) != 0);
+ }
+ /**
+ * optional string name = 2;
+ * @return The name.
+ */
+ @java.lang.Override
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ return (java.lang.String) ref;
+ } else {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ name_ = s;
+ return s;
+ }
+ }
+ /**
+ * optional string name = 2;
+ * @return The bytes for name.
+ */
+ @java.lang.Override
+ public com.google.protobuf.ByteString
+ getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof java.lang.String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+
+ private byte memoizedIsInitialized = -1;
+ @java.lang.Override
+ public final boolean isInitialized() {
+ byte isInitialized = memoizedIsInitialized;
+ if (isInitialized == 1) return true;
+ if (isInitialized == 0) return false;
+
+ memoizedIsInitialized = 1;
+ return true;
+ }
+
+ @java.lang.Override
+ public void writeTo(com.google.protobuf.CodedOutputStream output)
+ throws java.io.IOException {
+ if (((bitField0_ & 0x00000001) != 0)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 1, id_);
+ }
+ if (((bitField0_ & 0x00000002) != 0)) {
+ com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
+ }
+ getUnknownFields().writeTo(output);
+ }
+
+ @java.lang.Override
+ public int getSerializedSize() {
+ int size = memoizedSize;
+ if (size != -1) return size;
+
+ size = 0;
+ if (((bitField0_ & 0x00000001) != 0)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, id_);
+ }
+ if (((bitField0_ & 0x00000002) != 0)) {
+ size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
+ }
+ size += getUnknownFields().getSerializedSize();
+ memoizedSize = size;
+ return size;
+ }
+
+ @java.lang.Override
+ public boolean equals(final java.lang.Object obj) {
+ if (obj == this) {
+ return true;
+ }
+ if (!(obj instanceof com.wdbyte.tool.protos.StudentOuterClass.Student)) {
+ return super.equals(obj);
+ }
+ com.wdbyte.tool.protos.StudentOuterClass.Student other = (com.wdbyte.tool.protos.StudentOuterClass.Student) obj;
+
+ if (hasId() != other.hasId()) return false;
+ if (hasId()) {
+ if (!getId()
+ .equals(other.getId())) return false;
+ }
+ if (hasName() != other.hasName()) return false;
+ if (hasName()) {
+ if (!getName()
+ .equals(other.getName())) return false;
+ }
+ if (!getUnknownFields().equals(other.getUnknownFields())) return false;
+ return true;
+ }
+
+ @java.lang.Override
+ public int hashCode() {
+ if (memoizedHashCode != 0) {
+ return memoizedHashCode;
+ }
+ int hash = 41;
+ hash = (19 * hash) + getDescriptor().hashCode();
+ if (hasId()) {
+ hash = (37 * hash) + ID_FIELD_NUMBER;
+ hash = (53 * hash) + getId().hashCode();
+ }
+ if (hasName()) {
+ hash = (37 * hash) + NAME_FIELD_NUMBER;
+ hash = (53 * hash) + getName().hashCode();
+ }
+ hash = (29 * hash) + getUnknownFields().hashCode();
+ memoizedHashCode = hash;
+ return hash;
+ }
+
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(
+ java.nio.ByteBuffer data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(
+ java.nio.ByteBuffer data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(
+ com.google.protobuf.ByteString data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(
+ com.google.protobuf.ByteString data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(byte[] data)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(
+ byte[] data,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ return PARSER.parseFrom(data, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseDelimitedFrom(java.io.InputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseDelimitedFrom(
+ java.io.InputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(
+ com.google.protobuf.CodedInputStream input)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input);
+ }
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student parseFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ return com.google.protobuf.GeneratedMessageV3
+ .parseWithIOException(PARSER, input, extensionRegistry);
+ }
+
+ @java.lang.Override
+ public Builder newBuilderForType() { return newBuilder(); }
+ public static Builder newBuilder() {
+ return DEFAULT_INSTANCE.toBuilder();
+ }
+ public static Builder newBuilder(com.wdbyte.tool.protos.StudentOuterClass.Student prototype) {
+ return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+ }
+ @java.lang.Override
+ public Builder toBuilder() {
+ return this == DEFAULT_INSTANCE
+ ? new Builder() : new Builder().mergeFrom(this);
+ }
+
+ @java.lang.Override
+ protected Builder newBuilderForType(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ Builder builder = new Builder(parent);
+ return builder;
+ }
+ /**
+ * Protobuf type {@code com.wdbyte.protobuf.Student}
+ */
+ public static final class Builder extends
+ com.google.protobuf.GeneratedMessageV3.Builder implements
+ // @@protoc_insertion_point(builder_implements:com.wdbyte.protobuf.Student)
+ com.wdbyte.tool.protos.StudentOuterClass.StudentOrBuilder {
+ public static final com.google.protobuf.Descriptors.Descriptor
+ getDescriptor() {
+ return com.wdbyte.tool.protos.StudentOuterClass.internal_static_com_wdbyte_protobuf_Student_descriptor;
+ }
+
+ @java.lang.Override
+ protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internalGetFieldAccessorTable() {
+ return com.wdbyte.tool.protos.StudentOuterClass.internal_static_com_wdbyte_protobuf_Student_fieldAccessorTable
+ .ensureFieldAccessorsInitialized(
+ com.wdbyte.tool.protos.StudentOuterClass.Student.class, com.wdbyte.tool.protos.StudentOuterClass.Student.Builder.class);
+ }
+
+ // Construct using com.wdbyte.tool.protos.StudentOuterClass.Student.newBuilder()
+ private Builder() {
+
+ }
+
+ private Builder(
+ com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+ super(parent);
+
+ }
+ @java.lang.Override
+ public Builder clear() {
+ super.clear();
+ bitField0_ = 0;
+ id_ = "";
+ name_ = "";
+ return this;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Descriptors.Descriptor
+ getDescriptorForType() {
+ return com.wdbyte.tool.protos.StudentOuterClass.internal_static_com_wdbyte_protobuf_Student_descriptor;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.StudentOuterClass.Student getDefaultInstanceForType() {
+ return com.wdbyte.tool.protos.StudentOuterClass.Student.getDefaultInstance();
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.StudentOuterClass.Student build() {
+ com.wdbyte.tool.protos.StudentOuterClass.Student result = buildPartial();
+ if (!result.isInitialized()) {
+ throw newUninitializedMessageException(result);
+ }
+ return result;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.StudentOuterClass.Student buildPartial() {
+ com.wdbyte.tool.protos.StudentOuterClass.Student result = new com.wdbyte.tool.protos.StudentOuterClass.Student(this);
+ if (bitField0_ != 0) { buildPartial0(result); }
+ onBuilt();
+ return result;
+ }
+
+ private void buildPartial0(com.wdbyte.tool.protos.StudentOuterClass.Student result) {
+ int from_bitField0_ = bitField0_;
+ int to_bitField0_ = 0;
+ if (((from_bitField0_ & 0x00000001) != 0)) {
+ result.id_ = id_;
+ to_bitField0_ |= 0x00000001;
+ }
+ if (((from_bitField0_ & 0x00000002) != 0)) {
+ result.name_ = name_;
+ to_bitField0_ |= 0x00000002;
+ }
+ result.bitField0_ |= to_bitField0_;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(com.google.protobuf.Message other) {
+ if (other instanceof com.wdbyte.tool.protos.StudentOuterClass.Student) {
+ return mergeFrom((com.wdbyte.tool.protos.StudentOuterClass.Student)other);
+ } else {
+ super.mergeFrom(other);
+ return this;
+ }
+ }
+
+ public Builder mergeFrom(com.wdbyte.tool.protos.StudentOuterClass.Student other) {
+ if (other == com.wdbyte.tool.protos.StudentOuterClass.Student.getDefaultInstance()) return this;
+ if (other.hasId()) {
+ id_ = other.id_;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ }
+ if (other.hasName()) {
+ name_ = other.name_;
+ bitField0_ |= 0x00000002;
+ onChanged();
+ }
+ this.mergeUnknownFields(other.getUnknownFields());
+ onChanged();
+ return this;
+ }
+
+ @java.lang.Override
+ public final boolean isInitialized() {
+ return true;
+ }
+
+ @java.lang.Override
+ public Builder mergeFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws java.io.IOException {
+ if (extensionRegistry == null) {
+ throw new java.lang.NullPointerException();
+ }
+ try {
+ boolean done = false;
+ while (!done) {
+ int tag = input.readTag();
+ switch (tag) {
+ case 0:
+ done = true;
+ break;
+ case 10: {
+ id_ = input.readStringRequireUtf8();
+ bitField0_ |= 0x00000001;
+ break;
+ } // case 10
+ case 18: {
+ name_ = input.readStringRequireUtf8();
+ bitField0_ |= 0x00000002;
+ break;
+ } // case 18
+ default: {
+ if (!super.parseUnknownField(input, extensionRegistry, tag)) {
+ done = true; // was an endgroup tag
+ }
+ break;
+ } // default:
+ } // switch (tag)
+ } // while (!done)
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.unwrapIOException();
+ } finally {
+ onChanged();
+ } // finally
+ return this;
+ }
+ private int bitField0_;
+
+ private java.lang.Object id_ = "";
+ /**
+ * optional string id = 1;
+ * @return Whether the id field is set.
+ */
+ public boolean hasId() {
+ return ((bitField0_ & 0x00000001) != 0);
+ }
+ /**
+ * optional string id = 1;
+ * @return The id.
+ */
+ public java.lang.String getId() {
+ java.lang.Object ref = id_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ id_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * optional string id = 1;
+ * @return The bytes for id.
+ */
+ public com.google.protobuf.ByteString
+ getIdBytes() {
+ java.lang.Object ref = id_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ id_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * optional string id = 1;
+ * @param value The id to set.
+ * @return This builder for chaining.
+ */
+ public Builder setId(
+ java.lang.String value) {
+ if (value == null) { throw new NullPointerException(); }
+ id_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string id = 1;
+ * @return This builder for chaining.
+ */
+ public Builder clearId() {
+ id_ = getDefaultInstance().getId();
+ bitField0_ = (bitField0_ & ~0x00000001);
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string id = 1;
+ * @param value The bytes for id to set.
+ * @return This builder for chaining.
+ */
+ public Builder setIdBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) { throw new NullPointerException(); }
+ checkByteStringIsUtf8(value);
+ id_ = value;
+ bitField0_ |= 0x00000001;
+ onChanged();
+ return this;
+ }
+
+ private java.lang.Object name_ = "";
+ /**
+ * optional string name = 2;
+ * @return Whether the name field is set.
+ */
+ public boolean hasName() {
+ return ((bitField0_ & 0x00000002) != 0);
+ }
+ /**
+ * optional string name = 2;
+ * @return The name.
+ */
+ public java.lang.String getName() {
+ java.lang.Object ref = name_;
+ if (!(ref instanceof java.lang.String)) {
+ com.google.protobuf.ByteString bs =
+ (com.google.protobuf.ByteString) ref;
+ java.lang.String s = bs.toStringUtf8();
+ name_ = s;
+ return s;
+ } else {
+ return (java.lang.String) ref;
+ }
+ }
+ /**
+ * optional string name = 2;
+ * @return The bytes for name.
+ */
+ public com.google.protobuf.ByteString
+ getNameBytes() {
+ java.lang.Object ref = name_;
+ if (ref instanceof String) {
+ com.google.protobuf.ByteString b =
+ com.google.protobuf.ByteString.copyFromUtf8(
+ (java.lang.String) ref);
+ name_ = b;
+ return b;
+ } else {
+ return (com.google.protobuf.ByteString) ref;
+ }
+ }
+ /**
+ * optional string name = 2;
+ * @param value The name to set.
+ * @return This builder for chaining.
+ */
+ public Builder setName(
+ java.lang.String value) {
+ if (value == null) { throw new NullPointerException(); }
+ name_ = value;
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string name = 2;
+ * @return This builder for chaining.
+ */
+ public Builder clearName() {
+ name_ = getDefaultInstance().getName();
+ bitField0_ = (bitField0_ & ~0x00000002);
+ onChanged();
+ return this;
+ }
+ /**
+ * optional string name = 2;
+ * @param value The bytes for name to set.
+ * @return This builder for chaining.
+ */
+ public Builder setNameBytes(
+ com.google.protobuf.ByteString value) {
+ if (value == null) { throw new NullPointerException(); }
+ checkByteStringIsUtf8(value);
+ name_ = value;
+ bitField0_ |= 0x00000002;
+ onChanged();
+ return this;
+ }
+ @java.lang.Override
+ public final Builder setUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.setUnknownFields(unknownFields);
+ }
+
+ @java.lang.Override
+ public final Builder mergeUnknownFields(
+ final com.google.protobuf.UnknownFieldSet unknownFields) {
+ return super.mergeUnknownFields(unknownFields);
+ }
+
+
+ // @@protoc_insertion_point(builder_scope:com.wdbyte.protobuf.Student)
+ }
+
+ // @@protoc_insertion_point(class_scope:com.wdbyte.protobuf.Student)
+ private static final com.wdbyte.tool.protos.StudentOuterClass.Student DEFAULT_INSTANCE;
+ static {
+ DEFAULT_INSTANCE = new com.wdbyte.tool.protos.StudentOuterClass.Student();
+ }
+
+ public static com.wdbyte.tool.protos.StudentOuterClass.Student getDefaultInstance() {
+ return DEFAULT_INSTANCE;
+ }
+
+ private static final com.google.protobuf.Parser
+ PARSER = new com.google.protobuf.AbstractParser() {
+ @java.lang.Override
+ public Student parsePartialFrom(
+ com.google.protobuf.CodedInputStream input,
+ com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+ throws com.google.protobuf.InvalidProtocolBufferException {
+ Builder builder = newBuilder();
+ try {
+ builder.mergeFrom(input, extensionRegistry);
+ } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+ throw e.setUnfinishedMessage(builder.buildPartial());
+ } catch (com.google.protobuf.UninitializedMessageException e) {
+ throw e.asInvalidProtocolBufferException().setUnfinishedMessage(builder.buildPartial());
+ } catch (java.io.IOException e) {
+ throw new com.google.protobuf.InvalidProtocolBufferException(e)
+ .setUnfinishedMessage(builder.buildPartial());
+ }
+ return builder.buildPartial();
+ }
+ };
+
+ public static com.google.protobuf.Parser parser() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.google.protobuf.Parser getParserForType() {
+ return PARSER;
+ }
+
+ @java.lang.Override
+ public com.wdbyte.tool.protos.StudentOuterClass.Student getDefaultInstanceForType() {
+ return DEFAULT_INSTANCE;
+ }
+
+ }
+
+ private static final com.google.protobuf.Descriptors.Descriptor
+ internal_static_com_wdbyte_protobuf_Student_descriptor;
+ private static final
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+ internal_static_com_wdbyte_protobuf_Student_fieldAccessorTable;
+
+ public static com.google.protobuf.Descriptors.FileDescriptor
+ getDescriptor() {
+ return descriptor;
+ }
+ private static com.google.protobuf.Descriptors.FileDescriptor
+ descriptor;
+ static {
+ java.lang.String[] descriptorData = {
+ "\n\027resources/student.proto\022\023com.wdbyte.pr" +
+ "otobuf\"=\n\007Student\022\017\n\002id\030\001 \001(\tH\000\210\001\001\022\021\n\004na" +
+ "me\030\002 \001(\tH\001\210\001\001B\005\n\003_idB\007\n\005_nameB\032\n\026com.wdb" +
+ "yte.tool.protosP\000b\006proto3"
+ };
+ descriptor = com.google.protobuf.Descriptors.FileDescriptor
+ .internalBuildGeneratedFileFrom(descriptorData,
+ new com.google.protobuf.Descriptors.FileDescriptor[] {
+ });
+ internal_static_com_wdbyte_protobuf_Student_descriptor =
+ getDescriptor().getMessageTypes().get(0);
+ internal_static_com_wdbyte_protobuf_Student_fieldAccessorTable = new
+ com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+ internal_static_com_wdbyte_protobuf_Student_descriptor,
+ new java.lang.String[] { "Id", "Name", "Id", "Name", });
+ }
+
+ // @@protoc_insertion_point(outer_class_scope)
+}
From 84bf5cb17fc989942280ef40931ebfe49b5affee Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Wed, 7 Jun 2023 19:12:12 +0800
Subject: [PATCH 54/93] =?UTF-8?q?feat:=20-=20[ProcessBuilder=20API=20?=
=?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=95=99=E7=A8=8B](https://www.wdbyte.com/ja?=
=?UTF-8?q?va/os/processbuilder/)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
core-java-modules/core-java-os/.gitignore | 38 ++++++++++++++
core-java-modules/core-java-os/README.md | 6 +++
core-java-modules/core-java-os/pom.xml | 28 ++++++++++
.../java/com/wdbyte/os/process/ExecDemo.java | 18 +++++++
.../os/process/ProcessBuilderTest1.java | 52 +++++++++++++++++++
.../os/process/ProcessBuilderTest10.java | 42 +++++++++++++++
.../os/process/ProcessBuilderTest2.java | 32 ++++++++++++
.../os/process/ProcessBuilderTest3.java | 31 +++++++++++
.../os/process/ProcessBuilderTest4.java | 36 +++++++++++++
.../os/process/ProcessBuilderTest5.java | 40 ++++++++++++++
.../os/process/ProcessBuilderTest6.java | 23 ++++++++
.../os/process/ProcessBuilderTest7.java | 30 +++++++++++
.../os/process/ProcessBuilderTest8.java | 40 ++++++++++++++
.../os/process/ProcessBuilderTest9.java | 34 ++++++++++++
14 files changed, 450 insertions(+)
create mode 100644 core-java-modules/core-java-os/.gitignore
create mode 100644 core-java-modules/core-java-os/README.md
create mode 100644 core-java-modules/core-java-os/pom.xml
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ExecDemo.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest1.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest10.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest2.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest3.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest4.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest5.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest6.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest7.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest8.java
create mode 100644 core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest9.java
diff --git a/core-java-modules/core-java-os/.gitignore b/core-java-modules/core-java-os/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/core-java-modules/core-java-os/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/core-java-modules/core-java-os/README.md b/core-java-modules/core-java-os/README.md
new file mode 100644
index 0000000..bfb1c8a
--- /dev/null
+++ b/core-java-modules/core-java-os/README.md
@@ -0,0 +1,6 @@
+## core-java-os
+当前模块包含操作系统操作相关代码
+
+### 相关文章
+
+- [ProcessBuilder API 使用教程](https://www.wdbyte.com/java/os/processbuilder/)
\ No newline at end of file
diff --git a/core-java-modules/core-java-os/pom.xml b/core-java-modules/core-java-os/pom.xml
new file mode 100644
index 0000000..721644b
--- /dev/null
+++ b/core-java-modules/core-java-os/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ com.wdbyte.core-java-modules
+ core-java-modules
+ 1.0.0-SNAPSHOT
+
+
+ core-java-os
+
+
+ 17
+ 17
+ UTF-8
+
+
+
+
+ commons-io
+ commons-io
+ 2.12.0
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ExecDemo.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ExecDemo.java
new file mode 100644
index 0000000..4b73eb6
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ExecDemo.java
@@ -0,0 +1,18 @@
+package com.wdbyte.os.process;
+
+import java.io.IOException;
+
+/**
+ * @author https://www.wdbyte.com
+ */
+public class ExecDemo {
+
+ public static void main(String[] args) throws InterruptedException {
+ System.out.println("开始处理数据...");
+ for (int i = 0; i < 10; i++) {
+ Thread.sleep(1000);
+ System.out.println(i);
+ }
+ System.out.println("数据处理完毕");
+ }
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest1.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest1.java
new file mode 100644
index 0000000..919fb7f
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest1.java
@@ -0,0 +1,52 @@
+package com.wdbyte.os.process;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import org.apache.commons.io.IOUtils;
+
+/**
+ * Process 输出Java 版本号
+ * @author https://www.wdbyte.com
+ */
+public class ProcessBuilderTest1 {
+
+ public static void main(String[] args) throws IOException, InterruptedException {
+ // 构建执行命令
+ ProcessBuilder processBuilder = new ProcessBuilder("java","-version");
+ // 重定向 ERROR 流(有些 JDK 版本 Java 命令通过 ERROR 流输出)
+ processBuilder.redirectErrorStream(true);
+ // 运行命令 java -version
+ Process process = processBuilder.start();
+ // 过去PID
+ long pid = process.pid();
+ // 一次性获取运行结果
+ //String result = convertInputStreamToString(process.getInputStream());
+ String result = IOUtils.toString(process.getInputStream());
+ // 等到运行结束
+ int exitCode = process.waitFor();
+
+ System.out.println("pid:" + pid);
+ System.out.println("result:" + result);
+ System.out.println("exitCode:" + exitCode);
+ }
+
+ public static String convertInputStreamToString(InputStream inputStream) throws IOException {
+ StringBuilder sb = new StringBuilder();
+ try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) {
+ String line = null;
+ while ((line = bufferedReader.readLine()) != null) {
+ sb.append(line);
+ sb.append(System.lineSeparator());
+ }
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } finally {
+ inputStream.close();
+ }
+ return sb.toString();
+ }
+
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest10.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest10.java
new file mode 100644
index 0000000..6c980d9
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest10.java
@@ -0,0 +1,42 @@
+package com.wdbyte.os.process;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.CompletableFuture;
+
+/**
+ * @author https://www.wdbyte.com
+ */
+public class ProcessBuilderTest10 {
+ private static String BASE_DIR = "/Users/darcy/git/JavaNotes/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process";
+
+ public static void main(String[] args) throws InterruptedException {
+ ProcessBuilder processBuilder = new ProcessBuilder();
+ processBuilder.directory(new File(BASE_DIR));
+ processBuilder.command("java", "ExecDemo.java");
+ // 把子线程 I/O 输出重定向当前进程
+ processBuilder.inheritIO();
+
+ // 创建 CompletableFuture 对象
+ CompletableFuture future = CompletableFuture.supplyAsync(() -> {
+ try {
+ // 命令执行
+ Process process = processBuilder.start();
+ // 任务超时时间
+ process.waitFor();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } catch (InterruptedException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ });
+
+ // 注册回调函数,处理异步等待的结果
+ future.thenAccept(result -> {
+ System.out.println("进程执行结束");
+ });
+ System.out.println("主进程等待");
+ Thread.sleep(20 * 1000);
+ }
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest2.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest2.java
new file mode 100644
index 0000000..7075784
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest2.java
@@ -0,0 +1,32 @@
+package com.wdbyte.os.process;
+
+import java.io.IOException;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+
+/**
+ * 修改环境变量
+ *
+ * @author https://www.wdbyte.com
+ */
+public class ProcessBuilderTest2 {
+
+ public static void main(String[] args) throws IOException, InterruptedException {
+ ProcessBuilder processBuilder = new ProcessBuilder();
+ Map environment = processBuilder.environment();
+ environment.forEach((k, v) -> System.out.println(k + ":" + v));
+ System.out.println("--------------");
+ processBuilder.environment().put("my_website", "www.wdbyte.com");
+ processBuilder.command("/bin/bash", "-c", "echo $my_website");
+
+ Process process = processBuilder.start();
+ long pid = process.pid();
+ String result = IOUtils.toString(process.getInputStream());
+ int exitCode = process.waitFor();
+
+ System.out.println("pid:" + pid);
+ System.out.println("result:" + result);
+ System.out.println("exitCode:" + exitCode);
+ }
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest3.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest3.java
new file mode 100644
index 0000000..3042923
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest3.java
@@ -0,0 +1,31 @@
+package com.wdbyte.os.process;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.IOUtils;
+
+/**
+ * 修改工作目录
+ * @author https://www.wdbyte.com
+ */
+public class ProcessBuilderTest3 {
+
+ private static String BASE_DIR = "/Users/darcy/git/JavaNotes/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process";
+
+ public static void main(String[] args) throws IOException, InterruptedException {
+ ProcessBuilder processBuilder = new ProcessBuilder();
+ processBuilder.directory(new File(BASE_DIR));
+ processBuilder.command("/bin/bash", "-c", "pwd");
+ Process process = processBuilder.start();
+
+ long pid = process.pid();
+ String result = IOUtils.toString(process.getInputStream());
+ int exitCode = process.waitFor();
+
+ System.out.println("pid:" + pid);
+ System.out.println("result:" + result);
+ System.out.println("exitCode:" + exitCode);
+ }
+
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest4.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest4.java
new file mode 100644
index 0000000..73d91be
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest4.java
@@ -0,0 +1,36 @@
+package com.wdbyte.os.process;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+
+/**
+ * 输出日志到指定文件
+ * @author https://www.wdbyte.com
+ */
+public class ProcessBuilderTest4 {
+ private static String BASE_DIR = "/Users/darcy/git/JavaNotes/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process";
+
+ public static void main(String[] args) throws IOException, InterruptedException {
+ ProcessBuilder processBuilder = new ProcessBuilder();
+ processBuilder.directory(new File(BASE_DIR));
+ processBuilder.command("/bin/bash", "-c", "ls -l");
+
+ File logFile = new File(BASE_DIR + "/process_log.txt");
+ // 输出到日志文件
+ processBuilder.redirectOutput(logFile);
+ // 追加日志到文件
+ // processBuilder.redirectOutput(ProcessBuilder.Redirect.appendTo(logFile));
+ // 是否输出ERROR日志到文件
+ processBuilder.redirectErrorStream(true);
+
+ Process process = processBuilder.start();
+ long pid = process.pid();
+ int exitCode = process.waitFor();
+ System.out.println("pid:" + pid);
+ System.out.println("exitCode:" + exitCode);
+
+ // 读取日志
+ Files.lines(logFile.toPath()).forEach(System.out::println);
+ }
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest5.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest5.java
new file mode 100644
index 0000000..54c4752
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest5.java
@@ -0,0 +1,40 @@
+package com.wdbyte.os.process;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+
+/**
+ * 输出日志到指定文件
+ *
+ * @author https://www.wdbyte.com
+ **
+ */
+public class ProcessBuilderTest5 {
+ private static String BASE_DIR = "/Users/darcy/git/JavaNotes/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process";
+
+ public static void main(String[] args) throws IOException, InterruptedException {
+
+ ProcessBuilder processBuilder = new ProcessBuilder();
+ processBuilder.directory(new File(BASE_DIR));
+ // 执行命令 xxx,命令不存在,会报 ERROR 日志
+ processBuilder.command("/bin/bash", "-c", "xxx");
+
+ File infoLogFile = new File(BASE_DIR + "/process_log_info.txt");
+ File errorLogFile = new File(BASE_DIR + "/process_log_error.txt");
+ // 日志输出到文件
+ processBuilder.redirectOutput(infoLogFile);
+ processBuilder.redirectError(errorLogFile);
+ Process process = processBuilder.start();
+
+ long pid = process.pid();
+ int exitCode = process.waitFor();
+
+ System.out.println("pid:" + pid);
+ System.out.println("exitCode:" + exitCode);
+
+ // 读取 ERROR 日志
+ Files.lines(errorLogFile.toPath()).forEach(System.out::println);
+ }
+
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest6.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest6.java
new file mode 100644
index 0000000..8c71d3b
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest6.java
@@ -0,0 +1,23 @@
+package com.wdbyte.os.process;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * 子线程 I/O 重定向到当前线程
+ * @author https://www.wdbyte.com
+ */
+public class ProcessBuilderTest6 {
+ public static void main(String[] args) throws IOException, InterruptedException {
+
+ ProcessBuilder processBuilder = new ProcessBuilder();
+ processBuilder.directory(new File("./"));
+ processBuilder.command("/bin/bash", "-c", "ls -l");
+ // 把子线程 I/O 输出重定向当前进程
+ processBuilder.inheritIO();
+ Process process = processBuilder.start();
+ int exitCode = process.waitFor();
+ System.out.println("exitCode:" + exitCode);
+ }
+
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest7.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest7.java
new file mode 100644
index 0000000..bbcf647
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest7.java
@@ -0,0 +1,30 @@
+package com.wdbyte.os.process;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * 运行一个 Java 程序
+ *
+ * @author https://www.wdbyte.com
+ **
+ */
+public class ProcessBuilderTest7 {
+ private static String BASE_DIR = "/Users/darcy/git/JavaNotes/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process";
+
+ public static void main(String[] args) throws IOException, InterruptedException {
+
+ ProcessBuilder processBuilder = new ProcessBuilder();
+ processBuilder.directory(new File(BASE_DIR));
+ processBuilder.command("java", "ExecDemo.java");
+ // 把子线程 I/O 输出重定向当前进程
+ processBuilder.inheritIO();
+ Process process = processBuilder.start();
+
+ long pid = process.pid();
+ int exitCode = process.waitFor();
+
+ System.out.println("pid:" + pid);
+ System.out.println("exitCode:" + exitCode);
+ }
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest8.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest8.java
new file mode 100644
index 0000000..d38fbec
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest8.java
@@ -0,0 +1,40 @@
+package com.wdbyte.os.process;
+
+import java.io.File;
+import java.io.IOException;
+import java.lang.ProcessBuilder.Redirect;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Java 9 中新增的管道操作
+ * @author https://www.wdbyte.com
+ */
+public class ProcessBuilderTest8 {
+ private static String BASE_DIR = "/Users/darcy/git/JavaNotes/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process";
+
+ public static void main(String[] args) throws IOException, InterruptedException {
+ ProcessBuilder ls = new ProcessBuilder("/bin/bash", "-c", "ls -l");
+ ProcessBuilder wc = new ProcessBuilder("wc", "-l");
+ // 追加日志到文件
+ File pipeLineLogFile = getFile(BASE_DIR + "/pipe_line_log.txt");
+ wc.redirectOutput(Redirect.appendTo(pipeLineLogFile));
+
+ List processes = ProcessBuilder.startPipeline(Arrays.asList(ls, wc));
+ Process process = processes.get(processes.size() - 1);
+
+ System.out.println("pid:" + process.pid());
+ System.out.println("exitCode:" + process.waitFor());
+
+ Files.lines(pipeLineLogFile.toPath()).forEach(System.out::println);
+ }
+
+ public static File getFile(String filePath) throws IOException {
+ File logFile = new File(filePath);
+ if (!logFile.exists()) {
+ logFile.createNewFile();
+ }
+ return logFile;
+ }
+}
diff --git a/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest9.java b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest9.java
new file mode 100644
index 0000000..6ee7b23
--- /dev/null
+++ b/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process/ProcessBuilderTest9.java
@@ -0,0 +1,34 @@
+package com.wdbyte.os.process;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * 运行一个 Java 程序
+ * 等待一定时间后检查状态,未结束则直接杀死进程。
+ *
+ * @author https://www.wdbyte.com
+ */
+public class ProcessBuilderTest9 {
+ private static String BASE_DIR = "/Users/darcy/git/JavaNotes/core-java-modules/core-java-os/src/main/java/com/wdbyte/os/process";
+
+ public static void main(String[] args) throws IOException, InterruptedException {
+ ProcessBuilder processBuilder = new ProcessBuilder();
+ processBuilder.directory(new File(BASE_DIR));
+ processBuilder.command("java", "ExecDemo.java");
+ // 把子线程 I/O 输出重定向当前进程
+ processBuilder.inheritIO();
+ Process process = processBuilder.start();
+ // 等待一定时间
+ boolean waitFor = process.waitFor(3, TimeUnit.SECONDS);
+ System.out.println("waitFor:" + waitFor);
+ // 若未退出,杀死子进程
+ if (!waitFor) {
+ process.destroyForcibly();
+ process.waitFor();
+ System.out.println("杀死进程:" + process);
+ }
+
+ }
+}
From 2f49ceddbb88073fa747f3a1ba095e5b9629518d Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Wed, 7 Jun 2023 19:13:17 +0800
Subject: [PATCH 55/93] =?UTF-8?q?feat:=20-=20[ProcessBuilder=20API=20?=
=?UTF-8?q?=E4=BD=BF=E7=94=A8=E6=95=99=E7=A8=8B](https://www.wdbyte.com/ja?=
=?UTF-8?q?va/os/processbuilder/)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 3 +++
core-java-modules/README.md | 4 +++-
core-java-modules/pom.xml | 1 +
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 2af0b44..543e7f9 100644
--- a/README.md
+++ b/README.md
@@ -53,6 +53,9 @@
- [Java 枚举](https://www.wdbyte.com/java/enum/)
- [Java 集合框架](https://www.wdbyte.com/java/collection/)
+## Java 进阶
+- [ProcessBuilder API 使用教程](https://www.wdbyte.com/java/os/processbuilder/)
+
## 🌿 SpringBoot 2.x 教程
使用 **Spring Boot** 可以快速的创建一个基于Spring 的、独立的、生产级的应用程序,并且可以直接运行。Spring Boot 采用习惯性配置,整合大量 Spring 组建和第三方库,让你只需要少量的修改就可以轻松上手。
diff --git a/core-java-modules/README.md b/core-java-modules/README.md
index caefe7a..6a78bae 100644
--- a/core-java-modules/README.md
+++ b/core-java-modules/README.md
@@ -32,4 +32,6 @@
- [Java 中的 5 个代码性能提升技巧](https://www.wdbyte.com/java/code-5-tips.html)
- [字符图案,我用字符画个冰墩墩](https://www.wdbyte.com/java/char-image.html)
-- [Java 中拼接 String 的 N 种方式](https://www.wdbyte.com/java/string-concat.html)
\ No newline at end of file
+- [Java 中拼接 String 的 N 种方式](https://www.wdbyte.com/java/string-concat.html)
+
+- [ProcessBuilder API 使用教程](https://www.wdbyte.com/java/os/processbuilder/)
\ No newline at end of file
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 55a59a8..bce3cb7 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -28,6 +28,7 @@
core-java-18
core-java-collect
core-java-base
+ core-java-os
\ No newline at end of file
From 2fa4fa8cc3c5b1fb1db94998f22eb2386f9ef8c0 Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Fri, 16 Jun 2023 20:54:11 +0800
Subject: [PATCH 56/93] =?UTF-8?q?feat:=20-=20[=E4=BD=BF=E7=94=A8=20JComman?=
=?UTF-8?q?der=20=E8=A7=A3=E6=9E=90=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=8F=82?=
=?UTF-8?q?=E6=95=B0](https://www.wdbyte.com/tool/jcommander/)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
tool-java-jcommander/.gitignore | 38 +++++++++++
tool-java-jcommander/README.md | 4 ++
tool-java-jcommander/pom.xml | 61 +++++++++++++++++
.../wdbyte/jcommander/FilePathConverter.java | 25 +++++++
.../java/com/wdbyte/jcommander/GitApp.java | 65 +++++++++++++++++++
.../com/wdbyte/jcommander/GitCommandAdd.java | 24 +++++++
.../wdbyte/jcommander/GitCommandCommit.java | 24 +++++++
.../wdbyte/jcommander/GitCommandOptions.java | 39 +++++++++++
.../java/com/wdbyte/jcommander/v1/GitApp.java | 20 ++++++
.../jcommander/v1/GitCommandOptions.java | 17 +++++
.../java/com/wdbyte/jcommander/v2/GitApp.java | 32 +++++++++
.../jcommander/v2/GitCommandOptions.java | 39 +++++++++++
.../java/com/wdbyte/jcommander/v3/GitApp.java | 32 +++++++++
.../jcommander/v3/GitCommandOptions.java | 40 ++++++++++++
.../jcommander/v3/UrlParameterValidator.java | 22 +++++++
.../java/com/wdbyte/jcommander/v4/GitApp.java | 38 +++++++++++
.../jcommander/v4/GitCommandCommit.java | 24 +++++++
.../jcommander/v4/GitCommandOptions.java | 40 ++++++++++++
.../jcommander/v4/UrlParameterValidator.java | 22 +++++++
.../java/com/wdbyte/jcommander/v5/GitApp.java | 45 +++++++++++++
.../wdbyte/jcommander/v5/GitCommandAdd.java | 23 +++++++
.../jcommander/v5/GitCommandCommit.java | 24 +++++++
.../jcommander/v5/GitCommandOptions.java | 40 ++++++++++++
.../jcommander/v5/UrlParameterValidator.java | 22 +++++++
24 files changed, 760 insertions(+)
create mode 100644 tool-java-jcommander/.gitignore
create mode 100644 tool-java-jcommander/README.md
create mode 100644 tool-java-jcommander/pom.xml
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/FilePathConverter.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitApp.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandAdd.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandCommit.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandOptions.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitApp.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitCommandOptions.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitApp.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitCommandOptions.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitApp.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitCommandOptions.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/UrlParameterValidator.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitApp.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandCommit.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandOptions.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/UrlParameterValidator.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitApp.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandAdd.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandCommit.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandOptions.java
create mode 100644 tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/UrlParameterValidator.java
diff --git a/tool-java-jcommander/.gitignore b/tool-java-jcommander/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/tool-java-jcommander/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/tool-java-jcommander/README.md b/tool-java-jcommander/README.md
new file mode 100644
index 0000000..d52fb9b
--- /dev/null
+++ b/tool-java-jcommander/README.md
@@ -0,0 +1,4 @@
+## tool-java-jcommander
+
+### 相关文章
+- [使用 JCommander 解析命令行参数](https://www.wdbyte.com/tool/jcommander/)
diff --git a/tool-java-jcommander/pom.xml b/tool-java-jcommander/pom.xml
new file mode 100644
index 0000000..cb92565
--- /dev/null
+++ b/tool-java-jcommander/pom.xml
@@ -0,0 +1,61 @@
+
+
+ 4.0.0
+
+ com.wdbyte
+ parent-modules
+ 1.0.0-SNAPSHOT
+
+
+ tool-java-jcommander
+
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+
+ com.beust
+ jcommander
+ 1.82
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.1.0
+
+
+
+ com.wdbyte.jcommander.GitApp
+
+
+
+
+ jar-with-dependencies
+
+
+ git-app
+
+
+
+ make-assembly
+ package
+
+ single
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/FilePathConverter.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/FilePathConverter.java
new file mode 100644
index 0000000..a451995
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/FilePathConverter.java
@@ -0,0 +1,25 @@
+package com.wdbyte.jcommander;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+import com.beust.jcommander.IStringConverter;
+import com.beust.jcommander.ParameterException;
+
+/**
+ *
+ * @author niulang
+ * @date 2023/06/15
+ */
+public class FilePathConverter implements IStringConverter {
+
+ @Override
+ public Path convert(String filePath) {
+ Path path = Paths.get(filePath);
+ if (Files.exists(path)) {
+ return path;
+ }
+ throw new ParameterException(String.format("文件不存在,path:%s", filePath));
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitApp.java
new file mode 100644
index 0000000..a9ca569
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitApp.java
@@ -0,0 +1,65 @@
+package com.wdbyte.jcommander;
+
+import java.nio.file.Path;
+
+import com.beust.jcommander.JCommander;
+import com.beust.jcommander.ParameterException;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * Git APP
+ *
+ * @author niulang
+ * @date 2023/06/07
+ */
+public class GitApp {
+ private static GitCommandOptions commandOptions = new GitCommandOptions();
+ private static GitCommandCommit commandCommit = new GitCommandCommit();
+ private static GitCommandAdd commandAdd = new GitCommandAdd();
+ private static JCommander commander;
+
+ static {
+ commander = JCommander.newBuilder()
+ .programName("GitApp")
+ .addObject(commandOptions)
+ .addCommand(commandAdd)
+ .addCommand(commandCommit)
+ .build();
+ }
+
+ public static void main(String[] args) {
+ if (args.length == 0) {
+ commander.usage();
+ return;
+ }
+ try {
+ commander.parse(args);
+ if (commandOptions.isHelp()) {
+ commander.usage();
+ return;
+ }
+ if (commandOptions.isVersion()) {
+ System.out.println("git version 2.24.3 (Apple Git-128)");
+ }
+ if (commandOptions.getCloneUrl() != null) {
+ System.out.printf("开始克隆远程仓库数据:%s%n", commandOptions.getCloneUrl());
+ return;
+ }
+ String parsedCommand = commander.getParsedCommand();
+ if (GitCommandCommit.COMMAND.equals(parsedCommand)) {
+ System.out.printf("提交暂存的文件并注释:%s%n", commandCommit.getComment());
+ return;
+ }
+ if (GitCommandAdd.COMMAND.equals(parsedCommand)) {
+ for (Path file : commandAdd.getFiles()) {
+ System.out.printf("暂存文件:%s%n", file);
+ }
+ return;
+ }
+ } catch (ParameterException e) {
+ System.err.println(e.getMessage());
+ commander.usage();
+ }
+ }
+
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandAdd.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandAdd.java
new file mode 100644
index 0000000..92d733e
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandAdd.java
@@ -0,0 +1,24 @@
+package com.wdbyte.jcommander;
+
+import java.nio.file.Path;
+import java.util.List;
+
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.Parameters;
+
+/**
+ * git add file1 file2
+ *
+ * @author niulang
+ * @date 2023/06/07
+ */
+@Parameters(commandDescription = "暂存文件", commandNames = "add", separators = " ")
+public class GitCommandAdd {
+ public static final String COMMAND = "add";
+ @Parameter(description = "暂存文件列表", converter = FilePathConverter.class)
+ private List files;
+
+ public List getFiles() {
+ return files;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandCommit.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandCommit.java
new file mode 100644
index 0000000..7758197
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandCommit.java
@@ -0,0 +1,24 @@
+package com.wdbyte.jcommander;
+
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.Parameters;
+
+/**
+ * git commit -m "desc"
+ * @author niulang
+ * @date 2023/06/07
+ */
+@Parameters(commandDescription = "提交文件", commandNames = "commit")
+public class GitCommandCommit {
+ public static final String COMMAND = "commit";
+
+ @Parameter(names = {"-comment", "-m"},
+ description = "请输入注释",
+ arity = 1,
+ required = true)
+ private String comment;
+
+ public String getComment() {
+ return comment;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandOptions.java
new file mode 100644
index 0000000..a845e72
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandOptions.java
@@ -0,0 +1,39 @@
+package com.wdbyte.jcommander;
+
+import java.net.URL;
+
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.converters.URLConverter;
+
+/**
+ * @author niulang
+ * @date 2023/06/07
+ */
+public class GitCommandOptions {
+
+ @Parameter(names = {"help", "-help", "-h"},
+ description = "查看帮助信息",
+ help = true)
+ private boolean help;
+
+ @Parameter(names = {"clone"},
+ description = "克隆远程仓库数据",
+ arity = 1)
+ private String cloneUrl;
+
+ @Parameter(names = {"version", "-version", "-v"},
+ description = "显示当前版本号")
+ private boolean version = false;
+
+ public boolean isHelp() {
+ return help;
+ }
+
+ public boolean isVersion() {
+ return version;
+ }
+
+ public String getCloneUrl() {
+ return cloneUrl;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitApp.java
new file mode 100644
index 0000000..1191d6f
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitApp.java
@@ -0,0 +1,20 @@
+package com.wdbyte.jcommander.v1;
+
+import com.beust.jcommander.JCommander;
+
+/**
+ * @author niulang
+ * @date 2023/06/15
+ */
+public class GitApp {
+
+ public static void main(String[] args) {
+ args = new String[]{"clone","http://www.wdbyte.com/test.git"};
+ GitCommandOptions gitCommandOptions = new GitCommandOptions();
+ JCommander commander = JCommander.newBuilder()
+ .addObject(gitCommandOptions)
+ .build();
+ commander.parse(args);
+ System.out.println("clone " + gitCommandOptions.getCloneUrl());
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitCommandOptions.java
new file mode 100644
index 0000000..5f166b7
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitCommandOptions.java
@@ -0,0 +1,17 @@
+package com.wdbyte.jcommander.v1;
+
+import com.beust.jcommander.Parameter;
+
+/**
+ * @author niulang
+ * @date 2023/06/07
+ */
+public class GitCommandOptions {
+ @Parameter(names = {"clone"},
+ description = "克隆远程仓库数据")
+ private String cloneUrl;
+
+ public String getCloneUrl() {
+ return cloneUrl;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitApp.java
new file mode 100644
index 0000000..e669602
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitApp.java
@@ -0,0 +1,32 @@
+package com.wdbyte.jcommander.v2;
+
+import com.beust.jcommander.JCommander;
+
+/**
+ * @author niulang
+ * @date 2023/06/15
+ */
+public class GitApp {
+
+ public static void main(String[] args) {
+ //args = new String[] {"clone", "http://www.wdbyte.com/test.git"};
+ GitCommandOptions gitCommandOptions = new GitCommandOptions();
+ JCommander commander = JCommander.newBuilder()
+ .programName("git-app")
+ .addObject(gitCommandOptions)
+ .build();
+ commander.parse(args);
+ // 打印帮助信息
+ if (gitCommandOptions.isHelp()) {
+ commander.usage();
+ return;
+ }
+ if (gitCommandOptions.isVersion()) {
+ System.out.println("git version 2.24.3 (Apple Git-128)");
+ return;
+ }
+ if (gitCommandOptions.getCloneUrl() != null) {
+ System.out.println("clone " + gitCommandOptions.getCloneUrl());
+ }
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitCommandOptions.java
new file mode 100644
index 0000000..50837be
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitCommandOptions.java
@@ -0,0 +1,39 @@
+package com.wdbyte.jcommander.v2;
+
+import com.beust.jcommander.Parameter;
+
+/**
+ * @author niulang
+ * @date 2023/06/07
+ */
+public class GitCommandOptions {
+
+ @Parameter(names = {"help", "-help", "-h"},
+ description = "查看帮助信息",
+ order = 1,
+ help = true)
+ private boolean help;
+
+ @Parameter(names = {"clone"},
+ description = "克隆远程仓库数据",
+ order = 3,
+ arity = 1)
+ private String cloneUrl;
+
+ @Parameter(names = {"version", "-version", "-v"},
+ description = "显示当前版本号",
+ order = 2)
+ private boolean version = false;
+
+ public boolean isHelp() {
+ return help;
+ }
+
+ public boolean isVersion() {
+ return version;
+ }
+
+ public String getCloneUrl() {
+ return cloneUrl;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitApp.java
new file mode 100644
index 0000000..8d1c7fd
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitApp.java
@@ -0,0 +1,32 @@
+package com.wdbyte.jcommander.v3;
+
+import com.beust.jcommander.JCommander;
+
+/**
+ * @author niulang
+ * @date 2023/06/15
+ */
+public class GitApp {
+
+ public static void main(String[] args) {
+ //args = new String[] {"clone", "ht2tp://www.wdbyte.com/test.git"};
+ GitCommandOptions gitCommandOptions = new GitCommandOptions();
+ JCommander commander = JCommander.newBuilder()
+ .programName("git-app")
+ .addObject(gitCommandOptions)
+ .build();
+ commander.parse(args);
+ // 打印帮助信息
+ if (gitCommandOptions.isHelp()) {
+ commander.usage();
+ return;
+ }
+ if (gitCommandOptions.isVersion()) {
+ System.out.println("git version 2.24.3 (Apple Git-128)");
+ return;
+ }
+ if (gitCommandOptions.getCloneUrl() != null) {
+ System.out.println("clone " + gitCommandOptions.getCloneUrl());
+ }
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitCommandOptions.java
new file mode 100644
index 0000000..fb0dc1b
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitCommandOptions.java
@@ -0,0 +1,40 @@
+package com.wdbyte.jcommander.v3;
+
+import com.beust.jcommander.Parameter;
+
+/**
+ * @author niulang
+ * @date 2023/06/07
+ */
+public class GitCommandOptions {
+
+ @Parameter(names = {"help", "-help", "-h"},
+ description = "查看帮助信息",
+ order = 1,
+ help = true)
+ private boolean help;
+
+ @Parameter(names = {"clone"},
+ description = "克隆远程仓库数据",
+ validateWith = UrlParameterValidator.class,
+ order = 3,
+ arity = 1)
+ private String cloneUrl;
+
+ @Parameter(names = {"version", "-version", "-v"},
+ description = "显示当前版本号",
+ order = 2)
+ private boolean version = false;
+
+ public boolean isHelp() {
+ return help;
+ }
+
+ public boolean isVersion() {
+ return version;
+ }
+
+ public String getCloneUrl() {
+ return cloneUrl;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/UrlParameterValidator.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/UrlParameterValidator.java
new file mode 100644
index 0000000..4da9108
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/UrlParameterValidator.java
@@ -0,0 +1,22 @@
+package com.wdbyte.jcommander.v3;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import com.beust.jcommander.IParameterValidator;
+import com.beust.jcommander.ParameterException;
+
+/**
+ * @author niulang
+ * @date 2023/06/15
+ */
+public class UrlParameterValidator implements IParameterValidator {
+ @Override
+ public void validate(String key, String value) throws ParameterException {
+ try {
+ new URL(value);
+ } catch (MalformedURLException e) {
+ throw new ParameterException("参数 " + key + " 的值必须是 URL 格式");
+ }
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitApp.java
new file mode 100644
index 0000000..1842cee
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitApp.java
@@ -0,0 +1,38 @@
+package com.wdbyte.jcommander.v4;
+
+import com.beust.jcommander.JCommander;
+
+/**
+ * @author niulang
+ * @date 2023/06/15
+ */
+public class GitApp {
+
+ public static void main(String[] args) {
+ //args = new String[] {"clone", "ht2tp://www.wdbyte.com/test.git"};
+ GitCommandOptions gitCommandOptions = new GitCommandOptions();
+ GitCommandCommit commandCommit = new GitCommandCommit();
+ JCommander commander = JCommander.newBuilder()
+ .programName("git-app")
+ .addObject(gitCommandOptions)
+ .addCommand(commandCommit)
+ .build();
+ commander.parse(args);
+ // 打印帮助信息
+ if (gitCommandOptions.isHelp()) {
+ commander.usage();
+ return;
+ }
+ if (gitCommandOptions.isVersion()) {
+ System.out.println("git version 2.24.3 (Apple Git-128)");
+ return;
+ }
+ if (gitCommandOptions.getCloneUrl() != null) {
+ System.out.println("clone " + gitCommandOptions.getCloneUrl());
+ }
+ String parsedCommand = commander.getParsedCommand();
+ if ("commit".equals(parsedCommand)) {
+ System.out.println(commandCommit.getComment());
+ }
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandCommit.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandCommit.java
new file mode 100644
index 0000000..7dd1c04
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandCommit.java
@@ -0,0 +1,24 @@
+package com.wdbyte.jcommander.v4;
+
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.Parameters;
+
+/**
+ * git commit -m "desc"
+ * @author niulang
+ * @date 2023/06/07
+ */
+@Parameters(commandDescription = "提交文件", commandNames = "commit")
+public class GitCommandCommit {
+ public static final String COMMAND = "commit";
+
+ @Parameter(names = {"-comment", "-m"},
+ description = "请输入注释",
+ arity = 1,
+ required = true)
+ private String comment;
+
+ public String getComment() {
+ return comment;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandOptions.java
new file mode 100644
index 0000000..86c02db
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandOptions.java
@@ -0,0 +1,40 @@
+package com.wdbyte.jcommander.v4;
+
+import com.beust.jcommander.Parameter;
+
+/**
+ * @author niulang
+ * @date 2023/06/07
+ */
+public class GitCommandOptions {
+
+ @Parameter(names = {"help", "-help", "-h"},
+ description = "查看帮助信息",
+ order = 1,
+ help = true)
+ private boolean help;
+
+ @Parameter(names = {"clone"},
+ description = "克隆远程仓库数据",
+ validateWith = UrlParameterValidator.class,
+ order = 3,
+ arity = 1)
+ private String cloneUrl;
+
+ @Parameter(names = {"version", "-version", "-v"},
+ description = "显示当前版本号",
+ order = 2)
+ private boolean version = false;
+
+ public boolean isHelp() {
+ return help;
+ }
+
+ public boolean isVersion() {
+ return version;
+ }
+
+ public String getCloneUrl() {
+ return cloneUrl;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/UrlParameterValidator.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/UrlParameterValidator.java
new file mode 100644
index 0000000..338e7c2
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/UrlParameterValidator.java
@@ -0,0 +1,22 @@
+package com.wdbyte.jcommander.v4;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import com.beust.jcommander.IParameterValidator;
+import com.beust.jcommander.ParameterException;
+
+/**
+ * @author niulang
+ * @date 2023/06/15
+ */
+public class UrlParameterValidator implements IParameterValidator {
+ @Override
+ public void validate(String key, String value) throws ParameterException {
+ try {
+ new URL(value);
+ } catch (MalformedURLException e) {
+ throw new ParameterException("参数 " + key + " 的值必须是 URL 格式");
+ }
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitApp.java
new file mode 100644
index 0000000..7ecbc54
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitApp.java
@@ -0,0 +1,45 @@
+package com.wdbyte.jcommander.v5;
+
+import com.beust.jcommander.JCommander;
+
+/**
+ * @author niulang
+ * @date 2023/06/15
+ */
+public class GitApp {
+
+ public static void main(String[] args) {
+ //args = new String[] {"clone", "ht2tp://www.wdbyte.com/test.git"};
+ GitCommandOptions gitCommandOptions = new GitCommandOptions();
+ GitCommandCommit commandCommit = new GitCommandCommit();
+ GitCommandAdd commandAdd = new GitCommandAdd();
+ JCommander commander = JCommander.newBuilder()
+ .programName("git-app")
+ .addObject(gitCommandOptions)
+ .addCommand(commandCommit)
+ .addCommand(commandAdd)
+ .build();
+ commander.parse(args);
+ // 打印帮助信息
+ if (gitCommandOptions.isHelp()) {
+ commander.usage();
+ return;
+ }
+ if (gitCommandOptions.isVersion()) {
+ System.out.println("git version 2.24.3 (Apple Git-128)");
+ return;
+ }
+ if (gitCommandOptions.getCloneUrl() != null) {
+ System.out.println("clone " + gitCommandOptions.getCloneUrl());
+ }
+ String parsedCommand = commander.getParsedCommand();
+ if ("commit".equals(parsedCommand)) {
+ System.out.println(commandCommit.getComment());
+ }
+ if ("add".equals(parsedCommand)) {
+ for (String file : commandAdd.getFiles()) {
+ System.out.println("暂存文件:" + file);
+ }
+ }
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandAdd.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandAdd.java
new file mode 100644
index 0000000..9e78ce6
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandAdd.java
@@ -0,0 +1,23 @@
+package com.wdbyte.jcommander.v5;
+
+import java.util.List;
+
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.Parameters;
+
+/**
+ * git add file1 file2
+ *
+ * @author niulang
+ * @date 2023/06/07
+ */
+@Parameters(commandDescription = "暂存文件", commandNames = "add", separators = " ")
+public class GitCommandAdd {
+ public static final String COMMAND = "add";
+ @Parameter(description = "暂存文件列表")
+ private List files;
+
+ public List getFiles() {
+ return files;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandCommit.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandCommit.java
new file mode 100644
index 0000000..7a5f321
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandCommit.java
@@ -0,0 +1,24 @@
+package com.wdbyte.jcommander.v5;
+
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.Parameters;
+
+/**
+ * git commit -m "desc"
+ * @author niulang
+ * @date 2023/06/07
+ */
+@Parameters(commandDescription = "提交文件", commandNames = "commit")
+public class GitCommandCommit {
+ public static final String COMMAND = "commit";
+
+ @Parameter(names = {"-comment", "-m"},
+ description = "请输入注释",
+ arity = 1,
+ required = true)
+ private String comment;
+
+ public String getComment() {
+ return comment;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandOptions.java
new file mode 100644
index 0000000..238aa39
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandOptions.java
@@ -0,0 +1,40 @@
+package com.wdbyte.jcommander.v5;
+
+import com.beust.jcommander.Parameter;
+
+/**
+ * @author niulang
+ * @date 2023/06/07
+ */
+public class GitCommandOptions {
+
+ @Parameter(names = {"help", "-help", "-h"},
+ description = "查看帮助信息",
+ order = 1,
+ help = true)
+ private boolean help;
+
+ @Parameter(names = {"clone"},
+ description = "克隆远程仓库数据",
+ validateWith = UrlParameterValidator.class,
+ order = 3,
+ arity = 1)
+ private String cloneUrl;
+
+ @Parameter(names = {"version", "-version", "-v"},
+ description = "显示当前版本号",
+ order = 2)
+ private boolean version = false;
+
+ public boolean isHelp() {
+ return help;
+ }
+
+ public boolean isVersion() {
+ return version;
+ }
+
+ public String getCloneUrl() {
+ return cloneUrl;
+ }
+}
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/UrlParameterValidator.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/UrlParameterValidator.java
new file mode 100644
index 0000000..3527e80
--- /dev/null
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/UrlParameterValidator.java
@@ -0,0 +1,22 @@
+package com.wdbyte.jcommander.v5;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import com.beust.jcommander.IParameterValidator;
+import com.beust.jcommander.ParameterException;
+
+/**
+ * @author niulang
+ * @date 2023/06/15
+ */
+public class UrlParameterValidator implements IParameterValidator {
+ @Override
+ public void validate(String key, String value) throws ParameterException {
+ try {
+ new URL(value);
+ } catch (MalformedURLException e) {
+ throw new ParameterException("参数 " + key + " 的值必须是 URL 格式");
+ }
+ }
+}
From a6aa6a40d9a7e5d13c96152d2bf6d702df4bf124 Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Fri, 16 Jun 2023 20:54:35 +0800
Subject: [PATCH 57/93] =?UTF-8?q?feat:=20-=20[=E4=BD=BF=E7=94=A8=20JComman?=
=?UTF-8?q?der=20=E8=A7=A3=E6=9E=90=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=8F=82?=
=?UTF-8?q?=E6=95=B0](https://www.wdbyte.com/tool/jcommander/)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 ++
pom.xml | 1 +
2 files changed, 3 insertions(+)
diff --git a/README.md b/README.md
index 543e7f9..3bbe625 100644
--- a/README.md
+++ b/README.md
@@ -187,6 +187,8 @@ Java 版本任你发,我用 Java 8 。但是多学点这种装x技巧总没错
>出处:孔子《论语》
一款好用的工具,不仅可以装X,更可以让你事半功倍,准时下班。
+
+- [使用 JCommander 解析命令行参数](https://www.wdbyte.com/tool/jcommander/)
- [Protobuf 教程](https://www.wdbyte.com/tool/protobuf/)
- [Apache HttpClient 5 使用详细教程](https://www.wdbyte.com/tool/httpclient5.html)
- [Jackson 解析 JSON 详细教程](https://www.wdbyte.com/tool/jackson.html)
diff --git a/pom.xml b/pom.xml
index 2452dc4..eb573fb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,6 +18,7 @@
tool-java-apache-common
tool-java-hotcode
tool-java-protobuf
+ tool-java-jcommander
parent-modules
Parent for all java modules
From 51e6cef3db5ed1eefb49b31e54a8554a986e9ac9 Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Mon, 19 Jun 2023 16:17:48 +0800
Subject: [PATCH 58/93] =?UTF-8?q?docs:=20=E6=B3=A8=E9=87=8A=E5=90=8D?=
=?UTF-8?q?=E7=A7=B0=E6=94=B9=E6=88=90=E7=BD=91=E5=9D=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/main/java/com/wdbyte/jcommander/FilePathConverter.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/GitApp.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/GitCommandAdd.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/GitCommandCommit.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/GitCommandOptions.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/v1/GitApp.java | 2 +-
.../main/java/com/wdbyte/jcommander/v1/GitCommandOptions.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/v2/GitApp.java | 2 +-
.../main/java/com/wdbyte/jcommander/v2/GitCommandOptions.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/v3/GitApp.java | 2 +-
.../main/java/com/wdbyte/jcommander/v3/GitCommandOptions.java | 2 +-
.../java/com/wdbyte/jcommander/v3/UrlParameterValidator.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/v4/GitApp.java | 2 +-
.../main/java/com/wdbyte/jcommander/v4/GitCommandCommit.java | 2 +-
.../main/java/com/wdbyte/jcommander/v4/GitCommandOptions.java | 2 +-
.../java/com/wdbyte/jcommander/v4/UrlParameterValidator.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/v5/GitApp.java | 2 +-
.../src/main/java/com/wdbyte/jcommander/v5/GitCommandAdd.java | 2 +-
.../main/java/com/wdbyte/jcommander/v5/GitCommandCommit.java | 2 +-
.../main/java/com/wdbyte/jcommander/v5/GitCommandOptions.java | 2 +-
.../java/com/wdbyte/jcommander/v5/UrlParameterValidator.java | 2 +-
21 files changed, 21 insertions(+), 21 deletions(-)
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/FilePathConverter.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/FilePathConverter.java
index a451995..bf88b62 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/FilePathConverter.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/FilePathConverter.java
@@ -9,7 +9,7 @@
/**
*
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/15
*/
public class FilePathConverter implements IStringConverter {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitApp.java
index a9ca569..20203c7 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitApp.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitApp.java
@@ -9,7 +9,7 @@
/**
* Git APP
*
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
public class GitApp {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandAdd.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandAdd.java
index 92d733e..7fc9ff1 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandAdd.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandAdd.java
@@ -9,7 +9,7 @@
/**
* git add file1 file2
*
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
@Parameters(commandDescription = "暂存文件", commandNames = "add", separators = " ")
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandCommit.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandCommit.java
index 7758197..6710a63 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandCommit.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandCommit.java
@@ -5,7 +5,7 @@
/**
* git commit -m "desc"
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
@Parameters(commandDescription = "提交文件", commandNames = "commit")
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandOptions.java
index a845e72..f9cc388 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandOptions.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/GitCommandOptions.java
@@ -6,7 +6,7 @@
import com.beust.jcommander.converters.URLConverter;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
public class GitCommandOptions {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitApp.java
index 1191d6f..f03e882 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitApp.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitApp.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.JCommander;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/15
*/
public class GitApp {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitCommandOptions.java
index 5f166b7..8e986de 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitCommandOptions.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v1/GitCommandOptions.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.Parameter;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
public class GitCommandOptions {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitApp.java
index e669602..6271d88 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitApp.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitApp.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.JCommander;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/15
*/
public class GitApp {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitCommandOptions.java
index 50837be..cff5d4d 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitCommandOptions.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v2/GitCommandOptions.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.Parameter;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
public class GitCommandOptions {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitApp.java
index 8d1c7fd..9350713 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitApp.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitApp.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.JCommander;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/15
*/
public class GitApp {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitCommandOptions.java
index fb0dc1b..fd75160 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitCommandOptions.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/GitCommandOptions.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.Parameter;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
public class GitCommandOptions {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/UrlParameterValidator.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/UrlParameterValidator.java
index 4da9108..6ff98fa 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/UrlParameterValidator.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v3/UrlParameterValidator.java
@@ -7,7 +7,7 @@
import com.beust.jcommander.ParameterException;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/15
*/
public class UrlParameterValidator implements IParameterValidator {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitApp.java
index 1842cee..33d3dfb 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitApp.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitApp.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.JCommander;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/15
*/
public class GitApp {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandCommit.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandCommit.java
index 7dd1c04..934c723 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandCommit.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandCommit.java
@@ -5,7 +5,7 @@
/**
* git commit -m "desc"
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
@Parameters(commandDescription = "提交文件", commandNames = "commit")
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandOptions.java
index 86c02db..32dcc40 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandOptions.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/GitCommandOptions.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.Parameter;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
public class GitCommandOptions {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/UrlParameterValidator.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/UrlParameterValidator.java
index 338e7c2..817bb7f 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/UrlParameterValidator.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v4/UrlParameterValidator.java
@@ -7,7 +7,7 @@
import com.beust.jcommander.ParameterException;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/15
*/
public class UrlParameterValidator implements IParameterValidator {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitApp.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitApp.java
index 7ecbc54..a7ee225 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitApp.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitApp.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.JCommander;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/15
*/
public class GitApp {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandAdd.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandAdd.java
index 9e78ce6..e1846f3 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandAdd.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandAdd.java
@@ -8,7 +8,7 @@
/**
* git add file1 file2
*
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
@Parameters(commandDescription = "暂存文件", commandNames = "add", separators = " ")
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandCommit.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandCommit.java
index 7a5f321..6b76c65 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandCommit.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandCommit.java
@@ -5,7 +5,7 @@
/**
* git commit -m "desc"
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
@Parameters(commandDescription = "提交文件", commandNames = "commit")
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandOptions.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandOptions.java
index 238aa39..0f3b3ee 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandOptions.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/GitCommandOptions.java
@@ -3,7 +3,7 @@
import com.beust.jcommander.Parameter;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/07
*/
public class GitCommandOptions {
diff --git a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/UrlParameterValidator.java b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/UrlParameterValidator.java
index 3527e80..cda4988 100644
--- a/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/UrlParameterValidator.java
+++ b/tool-java-jcommander/src/main/java/com/wdbyte/jcommander/v5/UrlParameterValidator.java
@@ -7,7 +7,7 @@
import com.beust.jcommander.ParameterException;
/**
- * @author niulang
+ * @author https://www.wdbyte.com
* @date 2023/06/15
*/
public class UrlParameterValidator implements IParameterValidator {
From 1f416f76fa68b92fe1c52396951888c77ba8fc7b Mon Sep 17 00:00:00 2001
From: niumoo
Date: Mon, 19 Jun 2023 22:44:07 +0800
Subject: [PATCH 59/93] =?UTF-8?q?feat:=20=E6=8E=A5=E5=8F=A3=E5=92=8C?=
=?UTF-8?q?=E6=8A=BD=E8=B1=A1=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../main/java/com/wdbyte/oop/abs/AbsPerson2.java | 13 +++++++++++++
.../com/wdbyte/oop/interfac/InterfacePerson.java | 9 +++++++++
2 files changed, 22 insertions(+)
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/AbsPerson2.java
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/InterfacePerson.java
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/AbsPerson2.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/AbsPerson2.java
new file mode 100644
index 0000000..2617065
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/abs/AbsPerson2.java
@@ -0,0 +1,13 @@
+package com.wdbyte.oop.abs;
+
+/**
+ * @author https://www.wdbyte.com
+ */
+public abstract class AbsPerson2 {
+
+ public void sayHello() {
+ System.out.println("say hello");
+ }
+
+ public abstract void sleep();
+}
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/InterfacePerson.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/InterfacePerson.java
new file mode 100644
index 0000000..0cd8562
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/oop/interfac/InterfacePerson.java
@@ -0,0 +1,9 @@
+package com.wdbyte.oop.interfac;
+
+public interface InterfacePerson {
+ default void sayHello(){
+ System.out.println("say hello");
+ }
+
+ void sleep();
+}
From 7c506d3ddaba2cca49bfa047b5e6629353359ffb Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Wed, 21 Jun 2023 17:12:06 +0800
Subject: [PATCH 60/93] =?UTF-8?q?feat:=20Java=20=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../java/com/wdbyte/comment/JavaDocDemo.java | 41 ++
.../java/com/wdbyte/comment/WelcomeMain.java | 51 ++
.../wdbyte/comment/doc/allclasses-frame.html | 19 +
.../comment/doc/allclasses-noframe.html | 19 +
.../doc/com/wdbyte/comment/JavaDocDemo.html | 310 ++++++++++
.../doc/com/wdbyte/comment/package-frame.html | 20 +
.../com/wdbyte/comment/package-summary.html | 140 +++++
.../doc/com/wdbyte/comment/package-tree.html | 129 ++++
.../wdbyte/comment/doc/constant-values.html | 120 ++++
.../wdbyte/comment/doc/deprecated-list.html | 120 ++++
.../java/com/wdbyte/comment/doc/help-doc.html | 217 +++++++
.../com/wdbyte/comment/doc/index-all.html | 157 +++++
.../java/com/wdbyte/comment/doc/index.html | 72 +++
.../com/wdbyte/comment/doc/overview-tree.html | 133 ++++
.../java/com/wdbyte/comment/doc/package-list | 1 +
.../java/com/wdbyte/comment/doc/script.js | 30 +
.../com/wdbyte/comment/doc/stylesheet.css | 574 ++++++++++++++++++
17 files changed, 2153 insertions(+)
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/JavaDocDemo.java
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/WelcomeMain.java
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/allclasses-frame.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/allclasses-noframe.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/JavaDocDemo.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-frame.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-summary.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-tree.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/constant-values.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/deprecated-list.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/help-doc.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/index-all.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/index.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/overview-tree.html
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/package-list
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/script.js
create mode 100644 core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/stylesheet.css
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/JavaDocDemo.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/JavaDocDemo.java
new file mode 100644
index 0000000..0625952
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/JavaDocDemo.java
@@ -0,0 +1,41 @@
+package com.wdbyte.comment;
+
+/**
+ * 输出一个名称和地域的问候信息。
+ * 如:Hello 朋友,welcome to 杭州
+ * 主要实现方法是 {@link JavaDocDemo#getMessage(String, String)}
+ *
+ * @author wdbyte
+ * @version 1.0
+ * @see com.wdbyte.comment.JavaDocDemo#getMessage(String, String)
+ * @since 1.0
+ */
+public class JavaDocDemo {
+
+ /**
+ * 启动应用程序
+ *
+ * @param args - 应用启动参数
+ */
+ public static void main(String[] args) {
+ System.out.println(getMessage("朋友", "杭州"));
+ }
+
+ /**
+ * 返回一个欢迎信息。
+ * @see Java Dcoumentation
+ * @param name - 访问者名称
+ * @param region - 地域信息
+ * @return - 欢迎信息语句
+ */
+ public static String getMessage(String name, String region) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("Hello ");
+ builder.append(name);
+ builder.append(", Welcome to ");
+ builder.append(region);
+ builder.append(" !!");
+ return builder.toString();
+ }
+
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/WelcomeMain.java b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/WelcomeMain.java
new file mode 100644
index 0000000..153bed9
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/WelcomeMain.java
@@ -0,0 +1,51 @@
+package com.wdbyte.comment;
+
+/**
+ * 输出一个名称和地域的问候信息。
+ * 如:Hello 朋友,welcome to 杭州
+ *
+ * @author https://www.wdbyte.com
+ */
+public class WelcomeMain {
+
+ /**
+ * 启动应用程序
+ *
+ * @param args - 应用启动参数
+ */
+ public static void main(String[] args) {
+ System.out.println(getMessage("朋友", "杭州"));
+ }
+
+ /**
+ * 返回一个欢迎信息。
+ *
+ * @param name - 访问者名称
+ * @param region - 地域信息
+ * @return - 欢迎信息
+ */
+ public static String getMessage(String name, String region) {
+ StringBuilder builder = new StringBuilder();
+ builder.append("Hello ");
+ builder.append(name);
+ builder.append(", Welcome to ");
+ builder.append(region);
+ builder.append(" !!");
+ return builder.toString();
+ }
+
+
+ /**
+ * 计算两数之和
+ * @param x 数字1
+ * @param y 数字2
+ * @return
+ */
+ public int add(int x, int y) {
+ /*
+ * 计算两数之和
+ */
+ int s = x + y;
+ return s;
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/allclasses-frame.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/allclasses-frame.html
new file mode 100644
index 0000000..d1e5c11
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/allclasses-frame.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+所有类
+
+
+
+
+
+所有类
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/allclasses-noframe.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/allclasses-noframe.html
new file mode 100644
index 0000000..4e6a6c4
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/allclasses-noframe.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+所有类
+
+
+
+
+
+所有类
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/JavaDocDemo.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/JavaDocDemo.html
new file mode 100644
index 0000000..12f6a1c
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/JavaDocDemo.html
@@ -0,0 +1,310 @@
+
+
+
+
+
+JavaDocDemo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+- 概要:
+- 嵌套 |
+- 字段 |
+- 构造器 |
+- 方法
+
+
+- 详细资料:
+- 字段 |
+- 构造器 |
+- 方法
+
+
+
+
+
+
+
+
+
+
+- java.lang.Object
+-
+
+- com.wdbyte.comment.JavaDocDemo
+
+
+
+
+
+
+-
+
+
+
+
+-
+
+
+
方法概要
+
+所有方法 静态方法 具体方法
+
+| 限定符和类型 |
+方法和说明 |
+
+
+static java.lang.String |
+getMessage(java.lang.String name,
+ java.lang.String region)
+返回一个欢迎信息。
+ |
+
+
+static void |
+main(java.lang.String[] args)
+启动应用程序
+ |
+
+
+
+-
+
+
+
从类继承的方法 java.lang.Object
+clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+
+
+
+
+
+
+
+
+-
+
+
+-
+
+
+
构造器详细资料
+
+
+
+
+-
+
JavaDocDemo
+public JavaDocDemo()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+- 概要:
+- 嵌套 |
+- 字段 |
+- 构造器 |
+- 方法
+
+
+- 详细资料:
+- 字段 |
+- 构造器 |
+- 方法
+
+
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-frame.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-frame.html
new file mode 100644
index 0000000..cafb6ef
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-frame.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+com.wdbyte.comment
+
+
+
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-summary.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-summary.html
new file mode 100644
index 0000000..14848c8
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-summary.html
@@ -0,0 +1,140 @@
+
+
+
+
+
+com.wdbyte.comment
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-
+
+类概要
+
+| 类 |
+说明 |
+
+
+
+| JavaDocDemo |
+
+ 输出一个名称和地域的问候信息。
+ |
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-tree.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-tree.html
new file mode 100644
index 0000000..dad782d
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/com/wdbyte/comment/package-tree.html
@@ -0,0 +1,129 @@
+
+
+
+
+
+com.wdbyte.comment 类分层结构
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/constant-values.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/constant-values.html
new file mode 100644
index 0000000..be8d957
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/constant-values.html
@@ -0,0 +1,120 @@
+
+
+
+
+
+常量字段值
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/deprecated-list.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/deprecated-list.html
new file mode 100644
index 0000000..a03d078
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/deprecated-list.html
@@ -0,0 +1,120 @@
+
+
+
+
+
+已过时的列表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/help-doc.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/help-doc.html
new file mode 100644
index 0000000..b96669f
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/help-doc.html
@@ -0,0 +1,217 @@
+
+
+
+
+
+API 帮助
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+-
+
程序包
+每个程序包都有一个页面, 其中包含它的类和接口的列表及其概要。此页面可以包含六个类别:
+
+- 接口 (斜体)
+- 类
+- 枚举
+- 异常错误
+- 错误
+- 注释类型
+
+
+-
+
类/接口
+每个类, 接口, 嵌套类和嵌套接口都有各自的页面。其中每个页面都由三部分 (类/接口说明, 概要表, 以及详细的成员说明) 组成:
+
+- 类继承图
+- 直接子类
+- 所有已知子接口
+- 所有已知实现类
+- 类/接口声明
+- 类/接口说明
+
+
+- 嵌套类概要
+- 字段概要
+- 构造器概要
+- 方法概要
+
+
+- 字段详细资料
+- 构造器详细资料
+- 方法详细资料
+
+每个概要条目都包含该项目的详细说明的第一句。概要条目按字母顺序排列, 而详细说明则按其在源代码中出现的顺序排列。这样保持了程序员所建立的逻辑分组。
+
+-
+
注释类型
+每个注释类型都有各自的页面, 其中包含以下部分:
+
+- 注释类型声明
+- 注释类型说明
+- 必需元素概要
+- 可选元素概要
+- 元素详细资料
+
+
+-
+
枚举
+每个枚举都有各自的页面, 其中包含以下部分:
+
+- 枚举声明
+- 枚举说明
+- 枚举常量概要
+- 枚举常量详细资料
+
+
+-
+
树 (类分层结构)
+对于所有程序包, 有一个类分层结构页面, 以及每个程序包的分层结构。每个分层结构页面都包含类的列表和接口的列表。从java.lang.Object开始, 按继承结构对类进行排列。接口不从java.lang.Object继承。
+
+- 查看“概览”页面时, 单击 "树" 将显示所有程序包的分层结构。
+- 查看特定程序包, 类或接口页面时, 单击 "树" 将仅显示该程序包的分层结构。
+
+
+-
+
已过时的 API
+已过时的 API 页面列出了所有已过时的 API。一般由于进行了改进并且通常提供了替代的 API, 所以建议不要使用已过时的 API。在将来的实现过程中, 可能会删除已过时的 API。
+
+-
+
索引
+索引 包含按字母顺序排列的所有类, 接口, 构造器, 方法和字段的列表。
+
+-
+
上一个/下一个
+这些链接使您可以转至下一个或上一个类, 接口, 程序包或相关页面。
+
+-
+
框架/无框架
+这些链接用于显示和隐藏 HTML 框架。所有页面均具有有框架和无框架两种显示方式。
+
+-
+
所有类
+所有类链接显示所有类和接口 (除了非静态嵌套类型)。
+
+-
+
序列化表格
+每个可序列化或可外部化的类都有其序列化字段和方法的说明。此信息对重新实现者有用, 而对使用 API 的开发者则没有什么用处。尽管导航栏中没有链接, 但您可以通过下列方式获取此信息: 转至任何序列化类, 然后单击类说明的 "另请参阅" 部分中的 "序列化表格"。
+
+-
+
常量字段值
+常量字段值页面列出了静态最终字段及其值。
+
+
+
此帮助文件适用于使用标准 doclet 生成的 API 文档。
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/index-all.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/index-all.html
new file mode 100644
index 0000000..06a699f
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/index-all.html
@@ -0,0 +1,157 @@
+
+
+
+
+
+索引
+
+
+
+
+
+
+
+
+
+
+
+C G J M
+
+
+
C
+
+- com.wdbyte.comment - 程序包 com.wdbyte.comment
+-
+
+
+
+
+
G
+
+- getMessage(String, String) - 类 中的静态方法com.wdbyte.comment.JavaDocDemo
+-
+
返回一个欢迎信息。
+
+
+
+
+
+
J
+
+- JavaDocDemo - com.wdbyte.comment中的类
+-
+
输出一个名称和地域的问候信息。
+
+- JavaDocDemo() - 类 的构造器com.wdbyte.comment.JavaDocDemo
+-
+
+
+
+
+
M
+
+- main(String[]) - 类 中的静态方法com.wdbyte.comment.JavaDocDemo
+-
+
启动应用程序
+
+
+
C G J M
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/index.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/index.html
new file mode 100644
index 0000000..720515c
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/index.html
@@ -0,0 +1,72 @@
+
+
+
+
+
+生成的文档 (无标题)
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/overview-tree.html b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/overview-tree.html
new file mode 100644
index 0000000..50e2869
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/overview-tree.html
@@ -0,0 +1,133 @@
+
+
+
+
+
+类分层结构
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/package-list b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/package-list
new file mode 100644
index 0000000..84f8f0f
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/package-list
@@ -0,0 +1 @@
+com.wdbyte.comment
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/script.js b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/script.js
new file mode 100644
index 0000000..b346356
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/script.js
@@ -0,0 +1,30 @@
+function show(type)
+{
+ count = 0;
+ for (var key in methods) {
+ var row = document.getElementById(key);
+ if ((methods[key] & type) != 0) {
+ row.style.display = '';
+ row.className = (count++ % 2) ? rowColor : altColor;
+ }
+ else
+ row.style.display = 'none';
+ }
+ updateTabs(type);
+}
+
+function updateTabs(type)
+{
+ for (var value in tabs) {
+ var sNode = document.getElementById(tabs[value][0]);
+ var spanNode = sNode.firstChild;
+ if (value == type) {
+ sNode.className = activeTableTab;
+ spanNode.innerHTML = tabs[value][1];
+ }
+ else {
+ sNode.className = tableTab;
+ spanNode.innerHTML = "" + tabs[value][1] + "";
+ }
+ }
+}
diff --git a/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/stylesheet.css b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/stylesheet.css
new file mode 100644
index 0000000..98055b2
--- /dev/null
+++ b/core-java-modules/core-java-base/src/main/java/com/wdbyte/comment/doc/stylesheet.css
@@ -0,0 +1,574 @@
+/* Javadoc style sheet */
+/*
+Overall document style
+*/
+
+@import url('resources/fonts/dejavu.css');
+
+body {
+ background-color:#ffffff;
+ color:#353833;
+ font-family:'DejaVu Sans', Arial, Helvetica, sans-serif;
+ font-size:14px;
+ margin:0;
+}
+a:link, a:visited {
+ text-decoration:none;
+ color:#4A6782;
+}
+a:hover, a:focus {
+ text-decoration:none;
+ color:#bb7a2a;
+}
+a:active {
+ text-decoration:none;
+ color:#4A6782;
+}
+a[name] {
+ color:#353833;
+}
+a[name]:hover {
+ text-decoration:none;
+ color:#353833;
+}
+pre {
+ font-family:'DejaVu Sans Mono', monospace;
+ font-size:14px;
+}
+h1 {
+ font-size:20px;
+}
+h2 {
+ font-size:18px;
+}
+h3 {
+ font-size:16px;
+ font-style:italic;
+}
+h4 {
+ font-size:13px;
+}
+h5 {
+ font-size:12px;
+}
+h6 {
+ font-size:11px;
+}
+ul {
+ list-style-type:disc;
+}
+code, tt {
+ font-family:'DejaVu Sans Mono', monospace;
+ font-size:14px;
+ padding-top:4px;
+ margin-top:8px;
+ line-height:1.4em;
+}
+dt code {
+ font-family:'DejaVu Sans Mono', monospace;
+ font-size:14px;
+ padding-top:4px;
+}
+table tr td dt code {
+ font-family:'DejaVu Sans Mono', monospace;
+ font-size:14px;
+ vertical-align:top;
+ padding-top:4px;
+}
+sup {
+ font-size:8px;
+}
+/*
+Document title and Copyright styles
+*/
+.clear {
+ clear:both;
+ height:0px;
+ overflow:hidden;
+}
+.aboutLanguage {
+ float:right;
+ padding:0px 21px;
+ font-size:11px;
+ z-index:200;
+ margin-top:-9px;
+}
+.legalCopy {
+ margin-left:.5em;
+}
+.bar a, .bar a:link, .bar a:visited, .bar a:active {
+ color:#FFFFFF;
+ text-decoration:none;
+}
+.bar a:hover, .bar a:focus {
+ color:#bb7a2a;
+}
+.tab {
+ background-color:#0066FF;
+ color:#ffffff;
+ padding:8px;
+ width:5em;
+ font-weight:bold;
+}
+/*
+Navigation bar styles
+*/
+.bar {
+ background-color:#4D7A97;
+ color:#FFFFFF;
+ padding:.8em .5em .4em .8em;
+ height:auto;/*height:1.8em;*/
+ font-size:11px;
+ margin:0;
+}
+.topNav {
+ background-color:#4D7A97;
+ color:#FFFFFF;
+ float:left;
+ padding:0;
+ width:100%;
+ clear:right;
+ height:2.8em;
+ padding-top:10px;
+ overflow:hidden;
+ font-size:12px;
+}
+.bottomNav {
+ margin-top:10px;
+ background-color:#4D7A97;
+ color:#FFFFFF;
+ float:left;
+ padding:0;
+ width:100%;
+ clear:right;
+ height:2.8em;
+ padding-top:10px;
+ overflow:hidden;
+ font-size:12px;
+}
+.subNav {
+ background-color:#dee3e9;
+ float:left;
+ width:100%;
+ overflow:hidden;
+ font-size:12px;
+}
+.subNav div {
+ clear:left;
+ float:left;
+ padding:0 0 5px 6px;
+ text-transform:uppercase;
+}
+ul.navList, ul.subNavList {
+ float:left;
+ margin:0 25px 0 0;
+ padding:0;
+}
+ul.navList li{
+ list-style:none;
+ float:left;
+ padding: 5px 6px;
+ text-transform:uppercase;
+}
+ul.subNavList li{
+ list-style:none;
+ float:left;
+}
+.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
+ color:#FFFFFF;
+ text-decoration:none;
+ text-transform:uppercase;
+}
+.topNav a:hover, .bottomNav a:hover {
+ text-decoration:none;
+ color:#bb7a2a;
+ text-transform:uppercase;
+}
+.navBarCell1Rev {
+ background-color:#F8981D;
+ color:#253441;
+ margin: auto 5px;
+}
+.skipNav {
+ position:absolute;
+ top:auto;
+ left:-9999px;
+ overflow:hidden;
+}
+/*
+Page header and footer styles
+*/
+.header, .footer {
+ clear:both;
+ margin:0 20px;
+ padding:5px 0 0 0;
+}
+.indexHeader {
+ margin:10px;
+ position:relative;
+}
+.indexHeader span{
+ margin-right:15px;
+}
+.indexHeader h1 {
+ font-size:13px;
+}
+.title {
+ color:#2c4557;
+ margin:10px 0;
+}
+.subTitle {
+ margin:5px 0 0 0;
+}
+.header ul {
+ margin:0 0 15px 0;
+ padding:0;
+}
+.footer ul {
+ margin:20px 0 5px 0;
+}
+.header ul li, .footer ul li {
+ list-style:none;
+ font-size:13px;
+}
+/*
+Heading styles
+*/
+div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
+ background-color:#dee3e9;
+ border:1px solid #d0d9e0;
+ margin:0 0 6px -8px;
+ padding:7px 5px;
+}
+ul.blockList ul.blockList ul.blockList li.blockList h3 {
+ background-color:#dee3e9;
+ border:1px solid #d0d9e0;
+ margin:0 0 6px -8px;
+ padding:7px 5px;
+}
+ul.blockList ul.blockList li.blockList h3 {
+ padding:0;
+ margin:15px 0;
+}
+ul.blockList li.blockList h2 {
+ padding:0px 0 20px 0;
+}
+/*
+Page layout container styles
+*/
+.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer {
+ clear:both;
+ padding:10px 20px;
+ position:relative;
+}
+.indexContainer {
+ margin:10px;
+ position:relative;
+ font-size:12px;
+}
+.indexContainer h2 {
+ font-size:13px;
+ padding:0 0 3px 0;
+}
+.indexContainer ul {
+ margin:0;
+ padding:0;
+}
+.indexContainer ul li {
+ list-style:none;
+ padding-top:2px;
+}
+.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
+ font-size:12px;
+ font-weight:bold;
+ margin:10px 0 0 0;
+ color:#4E4E4E;
+}
+.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
+ margin:5px 0 10px 0px;
+ font-size:14px;
+ font-family:'DejaVu Sans Mono',monospace;
+}
+.serializedFormContainer dl.nameValue dt {
+ margin-left:1px;
+ font-size:1.1em;
+ display:inline;
+ font-weight:bold;
+}
+.serializedFormContainer dl.nameValue dd {
+ margin:0 0 0 1px;
+ font-size:1.1em;
+ display:inline;
+}
+/*
+List styles
+*/
+ul.horizontal li {
+ display:inline;
+ font-size:0.9em;
+}
+ul.inheritance {
+ margin:0;
+ padding:0;
+}
+ul.inheritance li {
+ display:inline;
+ list-style:none;
+}
+ul.inheritance li ul.inheritance {
+ margin-left:15px;
+ padding-left:15px;
+ padding-top:1px;
+}
+ul.blockList, ul.blockListLast {
+ margin:10px 0 10px 0;
+ padding:0;
+}
+ul.blockList li.blockList, ul.blockListLast li.blockList {
+ list-style:none;
+ margin-bottom:15px;
+ line-height:1.4;
+}
+ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {
+ padding:0px 20px 5px 10px;
+ border:1px solid #ededed;
+ background-color:#f8f8f8;
+}
+ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {
+ padding:0 0 5px 8px;
+ background-color:#ffffff;
+ border:none;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
+ margin-left:0;
+ padding-left:0;
+ padding-bottom:15px;
+ border:none;
+}
+ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
+ list-style:none;
+ border-bottom:none;
+ padding-bottom:0;
+}
+table tr td dl, table tr td dl dt, table tr td dl dd {
+ margin-top:0;
+ margin-bottom:1px;
+}
+/*
+Table styles
+*/
+.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary {
+ width:100%;
+ border-left:1px solid #EEE;
+ border-right:1px solid #EEE;
+ border-bottom:1px solid #EEE;
+}
+.overviewSummary, .memberSummary {
+ padding:0px;
+}
+.overviewSummary caption, .memberSummary caption, .typeSummary caption,
+.useSummary caption, .constantsSummary caption, .deprecatedSummary caption {
+ position:relative;
+ text-align:left;
+ background-repeat:no-repeat;
+ color:#253441;
+ font-weight:bold;
+ clear:none;
+ overflow:hidden;
+ padding:0px;
+ padding-top:10px;
+ padding-left:1px;
+ margin:0px;
+ white-space:pre;
+}
+.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
+.useSummary caption a:link, .constantsSummary caption a:link, .deprecatedSummary caption a:link,
+.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
+.useSummary caption a:hover, .constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
+.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
+.useSummary caption a:active, .constantsSummary caption a:active, .deprecatedSummary caption a:active,
+.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
+.useSummary caption a:visited, .constantsSummary caption a:visited, .deprecatedSummary caption a:visited {
+ color:#FFFFFF;
+}
+.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
+.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span {
+ white-space:nowrap;
+ padding-top:5px;
+ padding-left:12px;
+ padding-right:12px;
+ padding-bottom:7px;
+ display:inline-block;
+ float:left;
+ background-color:#F8981D;
+ border: none;
+ height:16px;
+}
+.memberSummary caption span.activeTableTab span {
+ white-space:nowrap;
+ padding-top:5px;
+ padding-left:12px;
+ padding-right:12px;
+ margin-right:3px;
+ display:inline-block;
+ float:left;
+ background-color:#F8981D;
+ height:16px;
+}
+.memberSummary caption span.tableTab span {
+ white-space:nowrap;
+ padding-top:5px;
+ padding-left:12px;
+ padding-right:12px;
+ margin-right:3px;
+ display:inline-block;
+ float:left;
+ background-color:#4D7A97;
+ height:16px;
+}
+.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab {
+ padding-top:0px;
+ padding-left:0px;
+ padding-right:0px;
+ background-image:none;
+ float:none;
+ display:inline;
+}
+.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
+.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd {
+ display:none;
+ width:5px;
+ position:relative;
+ float:left;
+ background-color:#F8981D;
+}
+.memberSummary .activeTableTab .tabEnd {
+ display:none;
+ width:5px;
+ margin-right:3px;
+ position:relative;
+ float:left;
+ background-color:#F8981D;
+}
+.memberSummary .tableTab .tabEnd {
+ display:none;
+ width:5px;
+ margin-right:3px;
+ position:relative;
+ background-color:#4D7A97;
+ float:left;
+
+}
+.overviewSummary td, .memberSummary td, .typeSummary td,
+.useSummary td, .constantsSummary td, .deprecatedSummary td {
+ text-align:left;
+ padding:0px 0px 12px 10px;
+}
+th.colOne, th.colFirst, th.colLast, .useSummary th, .constantsSummary th,
+td.colOne, td.colFirst, td.colLast, .useSummary td, .constantsSummary td{
+ vertical-align:top;
+ padding-right:0px;
+ padding-top:8px;
+ padding-bottom:3px;
+}
+th.colFirst, th.colLast, th.colOne, .constantsSummary th {
+ background:#dee3e9;
+ text-align:left;
+ padding:8px 3px 3px 7px;
+}
+td.colFirst, th.colFirst {
+ white-space:nowrap;
+ font-size:13px;
+}
+td.colLast, th.colLast {
+ font-size:13px;
+}
+td.colOne, th.colOne {
+ font-size:13px;
+}
+.overviewSummary td.colFirst, .overviewSummary th.colFirst,
+.useSummary td.colFirst, .useSummary th.colFirst,
+.overviewSummary td.colOne, .overviewSummary th.colOne,
+.memberSummary td.colFirst, .memberSummary th.colFirst,
+.memberSummary td.colOne, .memberSummary th.colOne,
+.typeSummary td.colFirst{
+ width:25%;
+ vertical-align:top;
+}
+td.colOne a:link, td.colOne a:active, td.colOne a:visited, td.colOne a:hover, td.colFirst a:link, td.colFirst a:active, td.colFirst a:visited, td.colFirst a:hover, td.colLast a:link, td.colLast a:active, td.colLast a:visited, td.colLast a:hover, .constantValuesContainer td a:link, .constantValuesContainer td a:active, .constantValuesContainer td a:visited, .constantValuesContainer td a:hover {
+ font-weight:bold;
+}
+.tableSubHeadingColor {
+ background-color:#EEEEFF;
+}
+.altColor {
+ background-color:#FFFFFF;
+}
+.rowColor {
+ background-color:#EEEEEF;
+}
+/*
+Content styles
+*/
+.description pre {
+ margin-top:0;
+}
+.deprecatedContent {
+ margin:0;
+ padding:10px 0;
+}
+.docSummary {
+ padding:0;
+}
+
+ul.blockList ul.blockList ul.blockList li.blockList h3 {
+ font-style:normal;
+}
+
+div.block {
+ font-size:14px;
+ font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
+}
+
+td.colLast div {
+ padding-top:0px;
+}
+
+
+td.colLast a {
+ padding-bottom:3px;
+}
+/*
+Formatting effect styles
+*/
+.sourceLineNo {
+ color:green;
+ padding:0 30px 0 0;
+}
+h1.hidden {
+ visibility:hidden;
+ overflow:hidden;
+ font-size:10px;
+}
+.block {
+ display:block;
+ margin:3px 10px 2px 0px;
+ color:#474747;
+}
+.deprecatedLabel, .descfrmTypeLabel, .memberNameLabel, .memberNameLink,
+.overrideSpecifyLabel, .packageHierarchyLabel, .paramLabel, .returnLabel,
+.seeLabel, .simpleTagLabel, .throwsLabel, .typeNameLabel, .typeNameLink {
+ font-weight:bold;
+}
+.deprecationComment, .emphasizedPhrase, .interfaceName {
+ font-style:italic;
+}
+
+div.block div.block span.deprecationComment, div.block div.block span.emphasizedPhrase,
+div.block div.block span.interfaceName {
+ font-style:normal;
+}
+
+div.contentContainer ul.blockList li.blockList h2{
+ padding-bottom:0px;
+}
From 0bb6f79aad50f66e523be0c67987cbac2d25c590 Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Wed, 21 Jun 2023 17:14:58 +0800
Subject: [PATCH 61/93] =?UTF-8?q?feat:=20=E9=99=90=E6=B5=81=E7=AE=97?=
=?UTF-8?q?=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
{core-java-rate-limiter => tool-java-rate-limiter}/README.md | 0
{core-java-rate-limiter => tool-java-rate-limiter}/pom.xml | 2 +-
.../src/main/java/com/wdbyte/rate/limiter/RateLimiterGuava.java | 0
.../java/com/wdbyte/rate/limiter/RateLimiterSildingLog.java | 0
.../java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow.java | 0
.../java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow0.java | 0
.../java/com/wdbyte/rate/limiter/RateLimiterSlidingWindow.java | 0
.../src/main/resources/limiter.lua | 0
.../src/main/resources/limiter2.lua | 0
.../src/test/java/RedisLuaLimiterByIncr.java | 0
.../src/test/java/RedisLuaLimiterByZset.java | 0
11 files changed, 1 insertion(+), 1 deletion(-)
rename {core-java-rate-limiter => tool-java-rate-limiter}/README.md (100%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/pom.xml (92%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/src/main/java/com/wdbyte/rate/limiter/RateLimiterGuava.java (100%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/src/main/java/com/wdbyte/rate/limiter/RateLimiterSildingLog.java (100%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow.java (100%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow0.java (100%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/src/main/java/com/wdbyte/rate/limiter/RateLimiterSlidingWindow.java (100%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/src/main/resources/limiter.lua (100%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/src/main/resources/limiter2.lua (100%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/src/test/java/RedisLuaLimiterByIncr.java (100%)
rename {core-java-rate-limiter => tool-java-rate-limiter}/src/test/java/RedisLuaLimiterByZset.java (100%)
diff --git a/core-java-rate-limiter/README.md b/tool-java-rate-limiter/README.md
similarity index 100%
rename from core-java-rate-limiter/README.md
rename to tool-java-rate-limiter/README.md
diff --git a/core-java-rate-limiter/pom.xml b/tool-java-rate-limiter/pom.xml
similarity index 92%
rename from core-java-rate-limiter/pom.xml
rename to tool-java-rate-limiter/pom.xml
index 9679d8d..9b92fde 100644
--- a/core-java-rate-limiter/pom.xml
+++ b/tool-java-rate-limiter/pom.xml
@@ -10,7 +10,7 @@
4.0.0
com.wdbyte.rate.limiter
- core-java-rate-limiter
+ tool-java-rate-limiter
17
diff --git a/core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterGuava.java b/tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterGuava.java
similarity index 100%
rename from core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterGuava.java
rename to tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterGuava.java
diff --git a/core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSildingLog.java b/tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSildingLog.java
similarity index 100%
rename from core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSildingLog.java
rename to tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSildingLog.java
diff --git a/core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow.java b/tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow.java
similarity index 100%
rename from core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow.java
rename to tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow.java
diff --git a/core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow0.java b/tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow0.java
similarity index 100%
rename from core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow0.java
rename to tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSimpleWindow0.java
diff --git a/core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSlidingWindow.java b/tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSlidingWindow.java
similarity index 100%
rename from core-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSlidingWindow.java
rename to tool-java-rate-limiter/src/main/java/com/wdbyte/rate/limiter/RateLimiterSlidingWindow.java
diff --git a/core-java-rate-limiter/src/main/resources/limiter.lua b/tool-java-rate-limiter/src/main/resources/limiter.lua
similarity index 100%
rename from core-java-rate-limiter/src/main/resources/limiter.lua
rename to tool-java-rate-limiter/src/main/resources/limiter.lua
diff --git a/core-java-rate-limiter/src/main/resources/limiter2.lua b/tool-java-rate-limiter/src/main/resources/limiter2.lua
similarity index 100%
rename from core-java-rate-limiter/src/main/resources/limiter2.lua
rename to tool-java-rate-limiter/src/main/resources/limiter2.lua
diff --git a/core-java-rate-limiter/src/test/java/RedisLuaLimiterByIncr.java b/tool-java-rate-limiter/src/test/java/RedisLuaLimiterByIncr.java
similarity index 100%
rename from core-java-rate-limiter/src/test/java/RedisLuaLimiterByIncr.java
rename to tool-java-rate-limiter/src/test/java/RedisLuaLimiterByIncr.java
diff --git a/core-java-rate-limiter/src/test/java/RedisLuaLimiterByZset.java b/tool-java-rate-limiter/src/test/java/RedisLuaLimiterByZset.java
similarity index 100%
rename from core-java-rate-limiter/src/test/java/RedisLuaLimiterByZset.java
rename to tool-java-rate-limiter/src/test/java/RedisLuaLimiterByZset.java
From f8dda1be5ac4b44fafb27546de4521eb123fa91e Mon Sep 17 00:00:00 2001
From: niujinpeng
Date: Wed, 21 Jun 2023 17:15:19 +0800
Subject: [PATCH 62/93] =?UTF-8?q?feat:=20=E9=99=90=E6=B5=81=E7=AE=97?=
=?UTF-8?q?=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index eb573fb..413dd08 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
1.0.0-SNAPSHOT
core-java-modules
- core-java-rate-limiter
+ tool-java-rate-limiter
tool-java-junit5-jupiter-starter
leetcode
tool-java-apache-httpclient
From 42c006aa9ba6620823f355d857118495027558ac Mon Sep 17 00:00:00 2001
From: niumoo
Date: Thu, 12 Oct 2023 16:39:20 +0800
Subject: [PATCH 63/93] =?UTF-8?q?feat:=20=E9=87=8D=E6=9E=84=E7=9B=AE?=
=?UTF-8?q?=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 1 +
core-java-modules/core-java-20/.gitignore | 38 ++++++++
core-java-modules/core-java-20/pom.xml | 20 ++++
.../src/main/java/JEP431Test.java | 63 +++++++++++++
.../src/{ => main/java}/JEP433SwitchTest.java | 0
.../java}/Jep429ScopedValueTest.java | 0
.../java}/Jep432RecordAndInstance.java | 0
.../src/{ => main/java}/RecordTest.java | 0
.../io/image/GeneratorTextImageMini.java | 89 ++++++++++++++++++
.../target/classes/bingdundun.jpeg | Bin 0 -> 22890 bytes
core-java-modules/pom.xml | 7 +-
pom.xml | 2 +
tool-java-classloader/.gitignore | 38 ++++++++
tool-java-classloader/pom.xml | 20 ++++
tool-java-guava/.gitignore | 38 ++++++++
tool-java-guava/pom.xml | 20 ++++
tool-java-object-pool/pom.xml | 2 +-
tool-java-protobuf/.gitignore | 38 ++++++++
18 files changed, 372 insertions(+), 4 deletions(-)
create mode 100644 core-java-modules/core-java-20/.gitignore
create mode 100644 core-java-modules/core-java-20/pom.xml
create mode 100644 core-java-modules/core-java-20/src/main/java/JEP431Test.java
rename core-java-modules/core-java-20/src/{ => main/java}/JEP433SwitchTest.java (100%)
rename core-java-modules/core-java-20/src/{ => main/java}/Jep429ScopedValueTest.java (100%)
rename core-java-modules/core-java-20/src/{ => main/java}/Jep432RecordAndInstance.java (100%)
rename core-java-modules/core-java-20/src/{ => main/java}/RecordTest.java (100%)
create mode 100644 core-java-modules/core-java-io/src/main/java/com/wdbyte/io/image/GeneratorTextImageMini.java
create mode 100644 core-java-modules/core-java-io/target/classes/bingdundun.jpeg
create mode 100644 tool-java-classloader/.gitignore
create mode 100644 tool-java-classloader/pom.xml
create mode 100644 tool-java-guava/.gitignore
create mode 100644 tool-java-guava/pom.xml
create mode 100644 tool-java-protobuf/.gitignore
diff --git a/README.md b/README.md
index 3bbe625..a39d68e 100644
--- a/README.md
+++ b/README.md
@@ -51,6 +51,7 @@
- [Java 日期时间 Date](https://www.wdbyte.com/java/date/)
- [Java 异常处理](https://www.wdbyte.com/java/exception/)
- [Java 枚举](https://www.wdbyte.com/java/enum/)
+- [Java 注释](https://www.wdbyte.com/java/comment/)
- [Java 集合框架](https://www.wdbyte.com/java/collection/)
## Java 进阶
diff --git a/core-java-modules/core-java-20/.gitignore b/core-java-modules/core-java-20/.gitignore
new file mode 100644
index 0000000..5ff6309
--- /dev/null
+++ b/core-java-modules/core-java-20/.gitignore
@@ -0,0 +1,38 @@
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/core-java-modules/core-java-20/pom.xml b/core-java-modules/core-java-20/pom.xml
new file mode 100644
index 0000000..0495012
--- /dev/null
+++ b/core-java-modules/core-java-20/pom.xml
@@ -0,0 +1,20 @@
+
+
+
+ core-java-modules
+ com.wdbyte.core-java-modules
+ 1.0.0-SNAPSHOT
+
+ 4.0.0
+
+ com.wdbyte.jdk20
+ core-java-20
+
+
+ 20
+ 20
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-20/src/main/java/JEP431Test.java b/core-java-modules/core-java-20/src/main/java/JEP431Test.java
new file mode 100644
index 0000000..5096265
--- /dev/null
+++ b/core-java-modules/core-java-20/src/main/java/JEP431Test.java
@@ -0,0 +1,63 @@
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.TreeSet;
+
+/**
+ * JDK 21 之前,顺序集合中操作体验不一致
+ * @author niulang
+ * @date 2023/10/12ø
+ */
+public class JEP431Test {
+ public static void main(String[] args) {
+ // JDK 21 之前,顺序集合中操作体验不一致
+ List listTemp = List.of(1, 2, 3, 4, 5);
+
+ ArrayList list = new ArrayList(listTemp);
+ Deque deque = new ArrayDeque<>(listTemp);
+ LinkedHashSet linkedHashSet = new LinkedHashSet<>(listTemp);
+ TreeSet sortedSet = new TreeSet<>(listTemp);
+ LinkedHashMap linkedHashMap = new LinkedHashMap<>();
+ for (int i = 1; i <= 5; i++) {
+ linkedHashMap.put(i, i);
+ }
+
+ // 输出第一个元素
+ System.out.println(list.get(0));
+ System.out.println(deque.getFirst());
+ System.out.println(linkedHashSet.iterator().next());
+ System.out.println(sortedSet.first());
+ //System.out.println(linkedHashMap.firstEntry());没办法
+ System.out.println("-----------------------");
+
+ // 输出最后一个元素
+ System.out.println(list.get(list.size()-1));
+ System.out.println(deque.getLast());
+ //System.out.println(linkedHashSet()); 没办法,只能遍历
+ System.out.println(sortedSet.last());
+ //System.out.println(linkedHashMap); 没办法
+ System.out.println("-----------------------");
+
+ // 逆序遍历
+ for (var it = list.listIterator(list.size()); it.hasPrevious();) {
+ var e = it.previous();
+ System.out.print(e);
+ }
+ System.out.println();
+ for (var it = deque.descendingIterator(); it.hasNext();) {
+ var e = it.next();
+ System.out.print(e);
+ }
+ System.out.println();
+ for (Integer i : sortedSet.descendingSet()) {
+ System.out.print(i);
+ }
+ System.out.println();
+
+ // sortedSet linkedHashMap 逆序输出很难操作
+
+ }
+}
diff --git a/core-java-modules/core-java-20/src/JEP433SwitchTest.java b/core-java-modules/core-java-20/src/main/java/JEP433SwitchTest.java
similarity index 100%
rename from core-java-modules/core-java-20/src/JEP433SwitchTest.java
rename to core-java-modules/core-java-20/src/main/java/JEP433SwitchTest.java
diff --git a/core-java-modules/core-java-20/src/Jep429ScopedValueTest.java b/core-java-modules/core-java-20/src/main/java/Jep429ScopedValueTest.java
similarity index 100%
rename from core-java-modules/core-java-20/src/Jep429ScopedValueTest.java
rename to core-java-modules/core-java-20/src/main/java/Jep429ScopedValueTest.java
diff --git a/core-java-modules/core-java-20/src/Jep432RecordAndInstance.java b/core-java-modules/core-java-20/src/main/java/Jep432RecordAndInstance.java
similarity index 100%
rename from core-java-modules/core-java-20/src/Jep432RecordAndInstance.java
rename to core-java-modules/core-java-20/src/main/java/Jep432RecordAndInstance.java
diff --git a/core-java-modules/core-java-20/src/RecordTest.java b/core-java-modules/core-java-20/src/main/java/RecordTest.java
similarity index 100%
rename from core-java-modules/core-java-20/src/RecordTest.java
rename to core-java-modules/core-java-20/src/main/java/RecordTest.java
diff --git a/core-java-modules/core-java-io/src/main/java/com/wdbyte/io/image/GeneratorTextImageMini.java b/core-java-modules/core-java-io/src/main/java/com/wdbyte/io/image/GeneratorTextImageMini.java
new file mode 100644
index 0000000..4bad1d8
--- /dev/null
+++ b/core-java-modules/core-java-io/src/main/java/com/wdbyte/io/image/GeneratorTextImageMini.java
@@ -0,0 +1,89 @@
+package com.wdbyte.io.image;
+
+import java.awt.*;
+import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.IOException;
+
+import javax.imageio.ImageIO;
+
+/**
+ *
+ * 根据图片生成字符图案
+ * 1.图片大小缩放
+ * 2.遍历图片像素点
+ * 3.获取图片像素点亮度
+ * 4.匹配字符
+ * 5.输出图案
+ *
+ * @website https://www.wdbyte.com
+ */
+public class GeneratorTextImageMini {
+
+ public static void main(String[] args) throws Exception {
+ //BufferedImage image = resizeImage("/Users/darcy/Downloads/sanli.jpg", 120);
+ BufferedImage image = ImageIO.read(new File("/Users/darcy/Downloads/刘看山.jpg"));
+ printImage(image);
+ }
+
+ /**
+ * 图片缩放
+ *
+ * @param srcImagePath 图片路径
+ * @param targetWidth 目标宽度
+ * @return
+ * @throws IOException
+ */
+ public static BufferedImage resizeImage(String srcImagePath, int targetWidth) throws IOException {
+ Image srcImage = ImageIO.read(new File(srcImagePath));
+ int targetHeight = getTargetHeight(targetWidth, srcImage);
+ BufferedImage resizedImage = new BufferedImage(targetWidth, targetHeight, BufferedImage.TYPE_INT_RGB);
+ Graphics2D graphics2D = resizedImage.createGraphics();
+ graphics2D.drawImage(srcImage, 0, 0, targetWidth, targetHeight, null);
+ graphics2D.dispose();
+ return resizedImage;
+ }
+
+ /**
+ * 根据指定宽度,计算等比例高度
+ *
+ * @param targetWidth 目标宽度
+ * @param srcImage 图片信息
+ * @return
+ */
+ private static int getTargetHeight(int targetWidth, Image srcImage) {
+ int targetHeight = srcImage.getHeight(null);
+ if (targetWidth < srcImage.getWidth(null)) {
+ targetHeight = Math.round((float)targetHeight / ((float)srcImage.getWidth(null) / (float)targetWidth));
+ }
+ return targetHeight;
+ }
+
+ /**
+ * 图片打印
+ *
+ * @param image
+ * @throws IOException
+ */
+ public static void printImage(BufferedImage image) throws IOException {
+ final char[] PIXEL_CHAR_ARRAY = {'W', '@', '#', '8', '&', '*', 'o', ':', '.', ' '};
+ //final char[] PIXEL_CHAR_ARRAY = {',', '.', ' '};
+ int width = image.getWidth();
+ int height = image.getHeight();
+ for (int i = 0; i < height; i++) {
+ for (int j = 0; j < width; j++) {
+ int rgb = image.getRGB(j, i);
+ Color color = new Color(rgb);
+ int red = color.getRed();
+ int green = color.getGreen();
+ int blue = color.getBlue();
+ // 一个用于计算RGB像素点灰度的公式
+ Double grayscale = 0.2126 * red + 0.7152 * green + 0.0722 * blue;
+ double index = grayscale / (Math.ceil(255 / PIXEL_CHAR_ARRAY.length) + 0.5);
+ System.out.print(PIXEL_CHAR_ARRAY[(int)(Math.floor(index))]);
+ }
+ System.out.println();
+ }
+ }
+
+}
diff --git a/core-java-modules/core-java-io/target/classes/bingdundun.jpeg b/core-java-modules/core-java-io/target/classes/bingdundun.jpeg
new file mode 100644
index 0000000000000000000000000000000000000000..8243a8a745e076f571efcbedfc1611ba50a7c9fe
GIT binary patch
literal 22890
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