标签: java-14

在箭头 (->) 的帮助下切换表达式,现在可以产生/返回值

Java 14 中扩展的 switch 表达式,除了程序员/审阅者的视觉清晰度之外,switch 表达式的需求并不明确。是吗

  1. 与旧的 switch 表达式不同的字节码实现?
  2. 与以前的版本相比,执行方面有任何性能改进吗?

参考: https: //www.techgeeknext.com/java/java14-features

JDK 14版本:

 int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY                -> 7;
    case THURSDAY, SATURDAY     -> 8;
    case WEDNESDAY              -> 9;
};
Run Code Online (Sandbox Code Playgroud)

JDK 14 字节代码

   0: iconst_1
   1: istore_1
   2: iload_1
   3: tableswitch   { // 1 to 7
                 1: 44
                 2: 44
                 3: 44
                 4: 49
                 5: 54
                 6: 54
                 7: 59
           default: 64
      }
  44: bipush        6
  46: goto          65 …
Run Code Online (Sandbox Code Playgroud)

java performance switch-statement jvm-bytecode java-14

6
推荐指数
1
解决办法
2万
查看次数

gradle with openjdk 14 不支持的类文件主要版本 58

我正在尝试使用 openjdk 14 运行 gradle 6.3 构建,目标是 java 14。我收到以下错误。我知道这与编译文件的版本有关,但我的理解是 gradle 6.3 支持 java 14。

$ ./gradlew build
> Task :shadowJar FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':shadowJar'.
> Unsupported class file major version 58
Run Code Online (Sandbox Code Playgroud)
$ ./gradlew -v

------------------------------------------------------------
Gradle 6.3
------------------------------------------------------------

Build time:   2020-03-24 19:52:07 UTC
Revision:     bacd40b727b0130eeac8855ae3f9fd9a0b207c60

Kotlin:       1.3.70
Groovy:       2.5.10
Ant:          Apache Ant(TM) version 1.10.7 compiled on September 1 2019
JVM:          14 (Oracle Corporation 14+36-1461)
OS:           Windows 10 10.0 …
Run Code Online (Sandbox Code Playgroud)

java gradle java-14

6
推荐指数
1
解决办法
5189
查看次数

没有枚举常量 org.gradle.api.JavaVersion.VERSION_14

使用 Intellij IDEA,我使用 Gradle 6.4 和 Java 14 创建了一个新的 Gradle 项目,但是当我尝试构建该项目时,出现此错误:

没有枚举常量 org.gradle.api.JavaVersion.VERSION_14

我该怎么办 ?

编辑 1
我使用的是最新的 EAP 版本的 IDEA。

java intellij-idea gradle java-14

6
推荐指数
1
解决办法
635
查看次数

如果已安装,则无法重新运行 Java JPackage 安装程序,第二次只是退出而不发出警告

如果已安装,则无法重新运行JPackage安装程序,第二次似乎只是在没有警告的情况下退出,这在 Windows 上是正确的行为吗?

你可能会问我为什么要这样做?

就我而言,我正在尝试为我的 Java 应用程序构建 JPackage 安装程序,因此我正在构建它并安装它,然后调整设置,重建它并尝试重新安装。我花了一些时间才发现除非我卸载第一个安装(使用控制面板,程序和功能),否则我无法重新安装它

我的案例可能不是通常的用例,但它在没有给出任何原因的情况下退出,感觉不正确。

这也意味着,如果我向客户部署新版本,并且稍后需要修改安装程序,则必须修改版本号才能让用户重新安装,这通常可能是最佳实践,但我并不是特别想要如果应用程序本身没有更改,则执行此操作。

更新:自从通过查看 TaskManager 发现它仍在运行,但似乎没有做任何事情并且没有向用户提供任何指示!

java installation java-14 jpackage

6
推荐指数
1
解决办法
1346
查看次数

使用 JPackage 如何在 Windows 上创建安装程序图标

我正在使用JPackage在 Windows 上安装我的 Java 应用程序,我有自己的应用程序图标,我也希望在运行安装程序时也使用它。

我按照此处描述的一般方法运行 jpackage 两次,一次创建资源目录,一次使用资源目录

例如

jpackage @jpackage.txt --temp target/jpackage
jpackage @jpackage.txt --resource-dir target/jpackage
Run Code Online (Sandbox Code Playgroud)

但是,在两次调用之间,我在创建的目标/jpackage 资源目录中看不到任何要修改的安装程序图标。实际上,我看不到任何可以明显改变的东西,我很想知道人们为 Windows 安装做了什么改变。

在此处输入图片说明

java java-14 jpackage

6
推荐指数
1
解决办法
356
查看次数

AWS SDK 2 承担角色

@Bean
public DynamoDbClient amazonDynamoDB() {
    final AssumeRoleRequest assumeRoleRequest = AssumeRoleRequest.builder().roleSessionName(UUID.randomUUID().toString()).roleArn("roleArn").build();
    final StsAssumeRoleCredentialsProvider  stsAssumeRoleCredentialsProvider = StsAssumeRoleCredentialsProvider.builder().refreshRequest(assumeRoleRequest).build();
    return DynamoDbClient.builder().credentialsProvider(stsAssumeRoleCredentialsProvider).region(Region.EU_WEST_1)
            .build();
}
Run Code Online (Sandbox Code Playgroud)

出现错误

导致:org.springframework.beans.BeanInstantiationException:无法实例化 [software.amazon.awssdk.services.dynamodb.DynamoDbClient]:工厂方法“amazonDynamoDB”引发异常;嵌套异常是 java.lang.NullPointerException: STS 客户端不能为 null。在 spring.beans@5.2.7.RELEASE/org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) 在 spring.beans@5.2.7.RELEASE/org.springframework.beans.factory。 support.ConstructorResolver.instantiate(ConstructorResolver.java:650) ... 58 个公共帧被省略 原因:java.lang.NullPointerException:STS 客户端不能为空。

java amazon-dynamodb spring-boot aws-java-sdk-2.x java-14

6
推荐指数
1
解决办法
7149
查看次数

Java 记录和字段注释

当我们在 Java 中使用类时,为每个类字段/方法添加 JavaDoc/注释非常简单:

class Product {
    //Product unique identifier
    private int id;
}
Run Code Online (Sandbox Code Playgroud)

如果我们将这些类迁移到 Java 记录,则不清楚在这种情况下编写注释/JavaDocs 的最佳实践是什么:

record Product(int id, String name, double price) {
}
Run Code Online (Sandbox Code Playgroud)

因为现在所有字段都在一行中声明。

java java-14 java-record java-16

6
推荐指数
2
解决办法
209
查看次数

具有预览功能的 Maven Exec 插件

使用以下命令可以轻松编译 Java 源代码--enable-preview

<!-- Enable preview features -->
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <release>15</release>
        <compilerArgs>--enable-preview</compilerArgs>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但你怎么能跑呢exec:java?使用

<!-- Exec plugin.. run with `mvn exec:java` -->
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.6.0</version>
    <configuration>
        <mainClass>${mainClass}</mainClass>
        <commandlineArgs>--enable-preview</commandlineArgs>
        <arguments>
            <argument>--enable-preview</argument>
        </arguments>
        </systemProperties>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

仍然会出现以下错误:

An exception occured while executing the Java class. 
Preview features are not enabled for Main (class file version 59.65535). 
Try running with '--enable-preview'
Run Code Online (Sandbox Code Playgroud)

java maven maven-exec-plugin preview-feature java-14

5
推荐指数
1
解决办法
1419
查看次数

使用 Maven 设置 mssql-jdbc_auth

您好,我遇到了 mssql-jdbc_auth-<Version/Arch>.dll 的问题,如果我手动将其添加到我的路径中,它可以工作,但由于我使用 mave,这不是想要的方式:(。

我将以下几行添加到我的 pom.xml 中

    <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>mssql-jdbc</artifactId>
        <version>8.4.1.jre14</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc_auth -->
   <dependency>
       <groupId>com.microsoft.sqlserver</groupId>
       <artifactId>mssql-jdbc_auth</artifactId>
       <version>8.4.1.x64</version>
       <type>dll</type>
   </dependency>
Run Code Online (Sandbox Code Playgroud)

dll已下载但似乎未加载:(,因为我仍然遇到SQLServerException :此驱动程序未配置为集成身份验证问题。我如何解决这个问题,它只与maven一起使用,而不是将所有计算机上的dll添加到小路?

maven mssql-jdbc java-14

5
推荐指数
1
解决办法
1529
查看次数

Java 14 Switch-Expression 与默认情况

如何使用新的 Java 14 Switch 表达式将 switch case 声明为默认情况?

我想要的只是:

enum States {
    PLAY, STOP
}
...
States state = ...

switch (state) {
    case PLAY -> { run(); }
    case STOP, default -> { stop(); }
}
Run Code Online (Sandbox Code Playgroud)

哪个不能编译。它使用 Java 17 Preview -Features 进行编译,但这不是解决方案吗?!我真的想避免使用未完成的功能。

它应该相当于旧式的 switch 语句:

switch (state) {
    case PLAY: run(); break;
    case STOP: // <-- No extra "break;". Intentional fall-through!
    default: stop(); break;
}
Run Code Online (Sandbox Code Playgroud)

对于普通的 Java 14(或者可能是 17)来说这可能吗?

java java-14

5
推荐指数
1
解决办法
1598
查看次数