第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以編程方式檢測 JRE 中的預覽模式

以編程方式檢測 JRE 中的預覽模式

慕田峪7331174 2023-10-13 10:20:03
從 Java 11 開始,可以啟用 Java 編譯器和運行時的預覽模式。它允許預覽新功能。(日本EP 12)java --enable-preview如何從 Java 內(nèi)部檢測JVM 是否已在啟用預覽模式的情況下啟動?目的是在應用程序內(nèi)狀態(tài)頁面/json 上描述正在運行的容器 - 用于 DevOps 概述。到目前為止,我研究了系統(tǒng)屬性和標志,但都沒有包含任何提示。
查看完整描述

1 回答

?
守著星空守著你

TA貢獻1799條經(jīng)驗 獲得超8個贊

您可以檢查Java類文件minor_version。如果0xFFFF類文件是用--enable-preview編譯的。

下面給出了一個用于檢查這一點的簡單程序(注意,啟用了預覽功能的 Java 13 代碼?。?/p>

public final class ClassFileVersion {


? ? private final int major;

? ? private final int minor;


? ? private ClassFileVersion(int major, int minor) {

? ? ? ? this.major = major;

? ? ? ? this.minor = minor;

? ? }


? ? public static ClassFileVersion of(Class<?> classFile) throws IOException {

? ? ? ? try (InputStream is = classFile.getResourceAsStream("/%s.class".formatted(classFile.getName().replace('.', '/')))) {

? ? ? ? ? ? var buffer = new byte[8];

? ? ? ? ? ? if (is.read(buffer) != buffer.length) {

? ? ? ? ? ? ? ? throw new AssertionError("Not a Java Class File!");

? ? ? ? ? ? }

? ? ? ? ? ? return new ClassFileVersion(readUnsignedShort(buffer, 6), readUnsignedShort(buffer, 4));

? ? ? ? }

? ? }


? ? public String getVersionNumber() {

? ? ? ? return "%d.%d".formatted(major, minor);

? ? }


? ? public boolean isEnablePreview() {

? ? ? ? return major >= 55 && minor == 0xFFFF;

? ? }


? ? @Override

? ? public String toString() {

? ? ? ? return (major < 49 ? "JDK " : "Java SE ") +

? ? ? ? ? ? switch(major) {

? ? ? ? ? ? ? ? case 45 -> "1.1";

? ? ? ? ? ? ? ? case 46 -> "1.2";

? ? ? ? ? ? ? ? case 47 -> "1.3";

? ? ? ? ? ? ? ? case 48 -> "1.4";

? ? ? ? ? ? ? ? case 49 -> "5";

? ? ? ? ? ? ? ? case 50 -> "6";

? ? ? ? ? ? ? ? case 51 -> "7";

? ? ? ? ? ? ? ? case 52 -> "8";

? ? ? ? ? ? ? ? case 53 -> "9";

? ? ? ? ? ? ? ? case 54 -> "10";

? ? ? ? ? ? ? ? case 55 -> "11";

? ? ? ? ? ? ? ? case 56 -> "12";

? ? ? ? ? ? ? ? case 57 -> "13";

? ? ? ? ? ? ? ? case 58 -> "14";

? ? ? ? ? ? ? ? default -> throw wrongVersion();

? ? ? ? ? ? } +

? ? ? ? ? ? switch(minor) {

? ? ? ? ? ? ? ? case 0 -> "";

? ? ? ? ? ? ? ? case 3 -> {

? ? ? ? ? ? ? ? ? ? if (major != 45) {

? ? ? ? ? ? ? ? ? ? ? ? throw wrongVersion();

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? yield "";

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? case 0xFFFF -> " --enable-preview";

? ? ? ? ? ? ? ? default -> throw wrongVersion();

? ? ? ? ? ? };

? ? }


? ? private static int readUnsignedShort(byte[] buffer, int offset) {

? ? ? ? return ((buffer[offset] & 0xff) << 8) + (buffer[++offset] & 0xff);

? ? }


? ? private AssertionError wrongVersion() {

? ? ? ? return new AssertionError("Wrong Java Class File Version: %d.%d".formatted(major, minor));

? ? }

? ? // to run this code (JDK 13 needed):

? ? // java --enable-preview --source 13 ClassFileVersion.java?

? ? public static void main(String[] args) throws IOException {

? ? ? ? // prints "Java SE 13 --enable-preview"

? ? ? ? System.out.println(ClassFileVersion.of(ClassFileVersion.class));

? ? }


}


查看完整回答
反對 回復 2023-10-13
  • 1 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號