diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/HostInfo.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/HostInfo.java
index 24ef9549c..b341f41cb 100644
--- a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/HostInfo.java
+++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/HostInfo.java
@@ -18,6 +18,7 @@ package cn.hutool.v7.extra.management;
import cn.hutool.v7.core.net.NetUtil;
+import java.io.Serial;
import java.io.Serializable;
import java.net.InetAddress;
@@ -25,19 +26,23 @@ import java.net.InetAddress;
* 代表当前主机的信息。
*/
public class HostInfo implements Serializable {
+ @Serial
private static final long serialVersionUID = 1L;
- private final String HOST_NAME;
- private final String HOST_ADDRESS;
+ private final String name;
+ private final String address;
+ /**
+ * 构造当前主机信息。
+ */
public HostInfo() {
final InetAddress localhost = NetUtil.getLocalhostV4();
if(null != localhost){
- HOST_NAME = localhost.getHostName();
- HOST_ADDRESS = localhost.getHostAddress();
+ name = localhost.getHostName();
+ address = localhost.getHostAddress();
} else{
- HOST_NAME = null;
- HOST_ADDRESS = null;
+ name = null;
+ address = null;
}
}
@@ -51,7 +56,7 @@ public class HostInfo implements Serializable {
* @return 主机名
*/
public final String getName() {
- return HOST_NAME;
+ return name;
}
/**
@@ -64,7 +69,7 @@ public class HostInfo implements Serializable {
* @return 主机地址
*/
public final String getAddress() {
- return HOST_ADDRESS;
+ return address;
}
/**
diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaInfo.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaInfo.java
index 3b9404250..84a57cab9 100644
--- a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaInfo.java
+++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaInfo.java
@@ -20,6 +20,7 @@ import cn.hutool.v7.core.regex.ReUtil;
import cn.hutool.v7.core.array.ArrayUtil;
import cn.hutool.v7.core.util.SystemUtil;
+import java.io.Serial;
import java.io.Serializable;
/**
@@ -28,13 +29,14 @@ import java.io.Serializable;
* @see ManagementUtil#getJavaInfo() 使用方式
*/
public class JavaInfo implements Serializable {
+ @Serial
private static final long serialVersionUID = 1L;
- private static final String JAVA_VERSION = SystemUtil.get("java.version", false);
- private final float JAVA_VERSION_FLOAT = getJavaVersionAsFloat();
- private final int JAVA_VERSION_INT = getJavaVersionAsInt();
- private final String JAVA_VENDOR = SystemUtil.get("java.vendor", false);
- private final String JAVA_VENDOR_URL = SystemUtil.get("java.vendor.url", false);
+ private static final String version = SystemUtil.get("java.version", false);
+ private final float versionFloat = getJavaVersionAsFloat();
+ private final int versionInt = getJavaVersionAsInt();
+ private final String vendor = SystemUtil.get("java.vendor", false);
+ private final String vendorUrl = SystemUtil.get("java.vendor.url", false);
private final boolean IS_JAVA_1_8 = getJavaVersionMatches("1.8");
private final boolean IS_JAVA_9 = getJavaVersionMatches("9");
@@ -58,7 +60,7 @@ public class JavaInfo implements Serializable {
* @since Java 1.1
*/
public final String getVersion() {
- return JAVA_VERSION;
+ return version;
}
/**
@@ -75,7 +77,7 @@ public class JavaInfo implements Serializable {
* @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code 0}。
*/
public final float getVersionFloat() {
- return JAVA_VERSION_FLOAT;
+ return versionFloat;
}
/**
@@ -94,7 +96,7 @@ public class JavaInfo implements Serializable {
* @since Java 1.1
*/
public final int getVersionInt() {
- return JAVA_VERSION_INT;
+ return versionInt;
}
/**
@@ -113,13 +115,13 @@ public class JavaInfo implements Serializable {
* @since 6.0.1
*/
public final int getVersionIntSimple() {
- if (JAVA_VERSION == null) {
+ if (version == null) {
return 0;
}
- if (JAVA_VERSION.startsWith("1.")) {
- return Integer.parseInt(JAVA_VERSION.split("\\.")[1]);
+ if (version.startsWith("1.")) {
+ return Integer.parseInt(version.split("\\.")[1]);
}
- return Integer.parseInt(JAVA_VERSION.split("\\.")[0]);
+ return Integer.parseInt(version.split("\\.")[0]);
}
/**
@@ -128,11 +130,11 @@ public class JavaInfo implements Serializable {
* @return Java版本的float值或{@code 0}
*/
private float getJavaVersionAsFloat() {
- if (JAVA_VERSION == null) {
+ if (version == null) {
return 0f;
}
- String str = JAVA_VERSION;
+ String str = version;
str = ReUtil.get("^[0-9]{1,2}(\\.[0-9]{1,2})?", str, 0);
@@ -145,11 +147,11 @@ public class JavaInfo implements Serializable {
* @return Java版本的int值或{@code 0}
*/
private int getJavaVersionAsInt() {
- if (JAVA_VERSION == null) {
+ if (version == null) {
return 0;
}
- final String javaVersion = ReUtil.get("^[0-9]{1,2}(\\.[0-9]{1,2}){0,2}", JAVA_VERSION, 0);
+ final String javaVersion = ReUtil.get("^[0-9]{1,2}(\\.[0-9]{1,2}){0,2}", version, 0);
final String[] split = javaVersion.split("\\.");
String result = ArrayUtil.join(split, "");
@@ -172,7 +174,7 @@ public class JavaInfo implements Serializable {
* @since Java 1.1
*/
public final String getVendor() {
- return JAVA_VENDOR;
+ return vendor;
}
/**
@@ -185,7 +187,7 @@ public class JavaInfo implements Serializable {
* @since Java 1.1
*/
public final String getVendorURL() {
- return JAVA_VENDOR_URL;
+ return vendorUrl;
}
/**
@@ -309,11 +311,11 @@ public class JavaInfo implements Serializable {
* @return 如果版本匹配,则返回{@code true}
*/
private boolean getJavaVersionMatches(final String versionPrefix) {
- if (JAVA_VERSION == null) {
+ if (version == null) {
return false;
}
- return JAVA_VERSION.startsWith(versionPrefix);
+ return version.startsWith(versionPrefix);
}
/**
diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaRuntimeInfo.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaRuntimeInfo.java
index f3648a134..65056dff2 100644
--- a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaRuntimeInfo.java
+++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/JavaRuntimeInfo.java
@@ -19,12 +19,14 @@ package cn.hutool.v7.extra.management;
import cn.hutool.v7.core.text.split.SplitUtil;
import cn.hutool.v7.core.util.SystemUtil;
+import java.io.Serial;
import java.io.Serializable;
/**
* 代表当前运行的JRE的信息。
*/
public class JavaRuntimeInfo implements Serializable {
+ @Serial
private static final long serialVersionUID = 1L;
private final String JAVA_RUNTIME_NAME = SystemUtil.get("java.runtime.name", false);
diff --git a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/OsInfo.java b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/OsInfo.java
index 788271e50..e0426fcb2 100644
--- a/hutool-extra/src/main/java/cn/hutool/v7/extra/management/OsInfo.java
+++ b/hutool-extra/src/main/java/cn/hutool/v7/extra/management/OsInfo.java
@@ -18,43 +18,82 @@ package cn.hutool.v7.extra.management;
import cn.hutool.v7.core.util.SystemUtil;
+import java.io.Serial;
import java.io.Serializable;
/**
* 代表当前OS的信息。
*/
-public class OsInfo implements Serializable{
+public class OsInfo implements Serializable {
+ @Serial
private static final long serialVersionUID = 1L;
- private final String OS_VERSION = SystemUtil.get("os.version", false);
- private final String OS_ARCH = SystemUtil.get("os.arch", false);
- private final String OS_NAME = SystemUtil.get("os.name", false);
- private final boolean IS_OS_AIX = getOSMatches("AIX");
- private final boolean IS_OS_HP_UX = getOSMatches("HP-UX");
- private final boolean IS_OS_IRIX = getOSMatches("Irix");
- private final boolean IS_OS_LINUX = getOSMatches("Linux") || getOSMatches("LINUX");
- private final boolean IS_OS_MAC = getOSMatches("Mac");
- private final boolean IS_OS_MAC_OSX = getOSMatches("Mac OS X");
- private final boolean IS_OS_OS2 = getOSMatches("OS/2");
- private final boolean IS_OS_SOLARIS = getOSMatches("Solaris");
- private final boolean IS_OS_SUN_OS = getOSMatches("SunOS");
- private final boolean IS_OS_WINDOWS = getOSMatches("Windows");
- private final boolean IS_OS_WINDOWS_2000 = getOSMatches("Windows", "5.0");
- private final boolean IS_OS_WINDOWS_95 = getOSMatches("Windows 9", "4.0");
- private final boolean IS_OS_WINDOWS_98 = getOSMatches("Windows 9", "4.1");
- private final boolean IS_OS_WINDOWS_ME = getOSMatches("Windows", "4.9");
- private final boolean IS_OS_WINDOWS_NT = getOSMatches("Windows NT");
- private final boolean IS_OS_WINDOWS_XP = getOSMatches("Windows", "5.1");
-
- private final boolean IS_OS_WINDOWS_7 = getOSMatches("Windows", "6.1");
- private final boolean IS_OS_WINDOWS_8 = getOSMatches("Windows", "6.2");
- private final boolean IS_OS_WINDOWS_8_1 = getOSMatches("Windows", "6.3");
- private final boolean IS_OS_WINDOWS_10 = getOSMatches("Windows", "10.0");
+ private final String name;
+ private final String version;
+ private final String arch;
// 由于改变file.encoding属性并不会改变系统字符编码,为了保持一致,通过LocaleUtil取系统默认编码。
- private final String FILE_SEPARATOR = SystemUtil.get(SystemPropsKeys.FILE_SEPARATOR, false);
- private final String LINE_SEPARATOR = SystemUtil.get(SystemPropsKeys.LINE_SEPARATOR, false);
- private final String PATH_SEPARATOR = SystemUtil.get(SystemPropsKeys.PATH_SEPARATOR, false);
+ private final String fileSeparator;
+ private final String lineSeparator;
+ private final String pathSeparator;
+
+ private final boolean IS_OS_AIX;
+ private final boolean IS_OS_HP_UX;
+ private final boolean IS_OS_IRIX;
+ private final boolean IS_OS_LINUX;
+ private final boolean IS_OS_MAC;
+ private final boolean IS_OS_MAC_OSX;
+ private final boolean IS_OS_OS2;
+ private final boolean IS_OS_SOLARIS;
+ private final boolean IS_OS_SUN_OS;
+ private final boolean IS_OS_WINDOWS;
+ private final boolean IS_OS_WINDOWS_2000;
+ private final boolean IS_OS_WINDOWS_95;
+ private final boolean IS_OS_WINDOWS_98;
+ private final boolean IS_OS_WINDOWS_ME;
+ private final boolean IS_OS_WINDOWS_NT;
+ private final boolean IS_OS_WINDOWS_XP;
+
+ private final boolean IS_OS_WINDOWS_7;
+ private final boolean IS_OS_WINDOWS_8;
+ private final boolean IS_OS_WINDOWS_8_1;
+ private final boolean IS_OS_WINDOWS_10;
+ private final boolean IS_OS_WINDOWS_11;
+
+ /**
+ * 构造一个{@code OsInfo}对象,用于取得当前OS的信息。
+ */
+ public OsInfo() {
+ this.name = SystemUtil.get("os.name", false);
+ this.version = SystemUtil.get("os.version", false);
+ this.arch = SystemUtil.get("os.arch", false);
+
+ this.fileSeparator = SystemUtil.get(SystemPropsKeys.FILE_SEPARATOR, false);
+ this.lineSeparator = SystemUtil.get(SystemPropsKeys.LINE_SEPARATOR, false);
+ this.pathSeparator = SystemUtil.get(SystemPropsKeys.PATH_SEPARATOR, false);
+
+ this.IS_OS_AIX = getOSMatches("AIX");
+ this.IS_OS_HP_UX = getOSMatches("HP-UX");
+ this.IS_OS_IRIX = getOSMatches("Irix");
+ this.IS_OS_LINUX = getOSMatches("Linux") || getOSMatches("LINUX");
+ this.IS_OS_MAC = getOSMatches("Mac");
+ this.IS_OS_MAC_OSX = getOSMatches("Mac OS X");
+ this.IS_OS_OS2 = getOSMatches("OS/2");
+ this.IS_OS_SOLARIS = getOSMatches("Solaris");
+ this.IS_OS_SUN_OS = getOSMatches("SunOS");
+ this.IS_OS_WINDOWS = getOSMatches("Windows");
+ this.IS_OS_WINDOWS_2000 = getOSMatches("Windows", "5.0");
+ this.IS_OS_WINDOWS_95 = getOSMatches("Windows 9", "4.0");
+ this.IS_OS_WINDOWS_98 = getOSMatches("Windows 9", "4.1");
+ this.IS_OS_WINDOWS_ME = getOSMatches("Windows", "4.9");
+ this.IS_OS_WINDOWS_NT = getOSMatches("Windows NT");
+ this.IS_OS_WINDOWS_XP = getOSMatches("Windows", "5.1");
+ this.IS_OS_WINDOWS_7 = getOSMatches("Windows", "6.1");
+ this.IS_OS_WINDOWS_8 = getOSMatches("Windows", "6.2");
+ this.IS_OS_WINDOWS_8_1 = getOSMatches("Windows", "6.3");
+ this.IS_OS_WINDOWS_10 = getOSMatches("Windows", "10.0");
+ this.IS_OS_WINDOWS_11 = getOSMatches("Windows 11");
+ }
/**
* 取得当前OS的架构(取自系统属性:{@code os.arch})。
@@ -64,11 +103,10 @@ public class OsInfo implements Serializable{
*
+ * 如果不能取得系统属性{@code os.name}(因为Java安全限制),则总是返回{@code false} + *
* - * @return 如果匹配,则返回{@code true} + * @return 如果当前OS类型为Windows 11,则返回{@code true} */ - private boolean getOSMatches(final String osNamePrefix) { - if (OS_NAME == null) { - return false; - } - - return OS_NAME.startsWith(osNamePrefix); - } - - /** - * 匹配OS名称。 - * - * @param osNamePrefix OS名称前缀 - * @param osVersionPrefix OS版本前缀 - * - * @return 如果匹配,则返回{@code true} - */ - private boolean getOSMatches(final String osNamePrefix, final String osVersionPrefix) { - if ((OS_NAME == null) || (OS_VERSION == null)) { - return false; - } - - return OS_NAME.startsWith(osNamePrefix) && OS_VERSION.startsWith(osVersionPrefix); + public final boolean isWindows11() { + return IS_OS_WINDOWS_11; } /** @@ -400,11 +418,10 @@ public class OsInfo implements Serializable{ * * * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 - * * @since Java 1.1 */ public final String getFileSeparator() { - return FILE_SEPARATOR; + return fileSeparator; } /** @@ -415,11 +432,10 @@ public class OsInfo implements Serializable{ * * * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 - * * @since Java 1.1 */ public final String getLineSeparator() { - return LINE_SEPARATOR; + return lineSeparator; } /** @@ -430,11 +446,39 @@ public class OsInfo implements Serializable{ * * * @return 属性值,如果不能取得(因为Java安全限制)或值不存在,则返回{@code null}。 - * * @since Java 1.1 */ public final String getPathSeparator() { - return PATH_SEPARATOR; + return pathSeparator; + } + + /** + * 匹配OS名称。 + * + * @param osNamePrefix OS名称前缀 + * @return 如果匹配,则返回{@code true} + */ + private boolean getOSMatches(final String osNamePrefix) { + if (name == null) { + return false; + } + + return name.startsWith(osNamePrefix); + } + + /** + * 匹配OS名称。 + * + * @param osNamePrefix OS名称前缀 + * @param osVersionPrefix OS版本前缀 + * @return 如果匹配,则返回{@code true} + */ + private boolean getOSMatches(final String osNamePrefix, final String osVersionPrefix) { + if ((name == null) || (version == null)) { + return false; + } + + return name.startsWith(osNamePrefix) && version.startsWith(osVersionPrefix); } /** diff --git a/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java b/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java index 635313953..963c703c3 100644 --- a/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java +++ b/hutool-extra/src/test/java/cn/hutool/v7/extra/management/ManagementUtilTest.java @@ -16,6 +16,7 @@ package cn.hutool.v7.extra.management; +import cn.hutool.v7.core.lang.Console; import cn.hutool.v7.core.util.SystemUtil; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Disabled;