标签: java-14

JPackage在创建DMG之前将文件复制到应用程序的Resource文件夹中

我在 MacOS 上使用 Java 14 中的 JPackage,需要在构建 DMG 之前将文件复制到应用程序的 MacOS 和资源文件夹,但不知道如何操作。在打包工具用户指南中,它提到从名为 application-name-post-image.sh 的资源文件夹运行脚本,但这似乎没有发生。

java deployment packing java-14 jpackage

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

模式匹配实例

我在https://www.baeldung.com/java-pattern-matching-instanceof上遇到了这个惊人的话题。但是当我尝试运行以下代码时,它会引发编译时错误:

if(obj instanceof String s) {
    System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)

错误说:

语言级别“14”不支持“instanceof”中的模式

Error:(36, 34) java: instanceof 中的模式匹配是一个预览功能,默认情况下是禁用的。(使用 --enable-preview 在 instanceof 中启用模式匹配)

但是我安装了 Java 14。

java pattern-matching preview-feature java-14

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

如何在 IntelliJ IDEA 中启用 Java 14 记录?

我无法在 IntelliJ 中创建 Java 记录类,并且找不到启用它的选项。

有办法启用它吗?

java intellij-idea java-14 java-record

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

无法解析类“HibernatePersistenceProvider”

我在 build.gradle 中有 hibernate 依赖项,但出现以下错误

> Task :JPABootstrapping.main() FAILED
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named recipes
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:61)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    at setup.JPABootstrapping.main(JPABootstrapping.java:10)

Execution failed for task ':JPABootstrapping.main()'.
> Process 'command '/usr/lib/jvm/java-14-openjdk-amd64/bin/java'' finished with non-zero exit value 1
Run Code Online (Sandbox Code Playgroud)

persistence.xml在下src/main/resources/META-INF

<persistence>
    <persistence-unit name="recipes">
        <description>Hibernate Tips</description>
        <provider>
            org.hibernate.jpa.HibernatePersistenceProvider
        </provider>
        <exclude-unlisted-classes>false</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL81Dialect" />
            <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://192.168.122.242:5432/recipes" />
            <property name="javax.persistence.jdbc.user" value="postgres" />
            <property name="javax.persistence.jdbc.password" value="postgres" />
        </properties>
    </persistence-unit>
</persistence>
Run Code Online (Sandbox Code Playgroud)

IntelliJ的检查功能说 …

java hibernate intellij-idea gradle java-14

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

java中模式变量的范围是如何解析的?

我正在研究java中的模式变量。在阅读JLS时,它提到了有关何时引入模式变量的几个条件。它提到——

该分析依赖于技术术语“introduced by”,其形式如下:

  • 当 true 时,模式变量表达式引入
  • 当 false 时,模式变量表达式引入
  • 模式变量语句引入

在 6.3.1 中提到了表达式中模式变量的范围,其中指出何时为&&||!?:等引入模式变量。

但我觉得解释很混乱,谁能详细说明一下&&,,||!

模式变量的示例 -

Object o = "a";

if(o instanceof String s) {
    System.out.println(s); 
}
Run Code Online (Sandbox Code Playgroud)

我困惑的地方——

class foo {
    String s, n, p, m;

    void method() {
        Object o = "s";
        if (!(o instanceof Integer s) && o instanceof Integer n) {
            System.out.println(s + " " …
Run Code Online (Sandbox Code Playgroud)

java pattern-matching jls java-14

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

compareAndExchange 与 compareAndExchangeAcquire 有什么区别

这是 Java 库中的一个片段:

public final boolean compareAndExchangeAcquire(boolean expectedValue, boolean newValue) {
    return (int)VALUE.compareAndExchangeAcquire(this,
                                                (expectedValue ? 1 : 0),
                                                (newValue ? 1 : 0)) != 0;
}
Run Code Online (Sandbox Code Playgroud)

它来自AtomicBoolean课堂。演员怎么能int返回一个boolean

我的主要问题:compareAndExchangevs之间有什么区别compareAndExchangeAcquire


通俗地说:在申请之前xxxAcquire和之后写的语句xxxRelease可以自由重新排序xxx

在此处输入图片说明

java concurrency java-14

0
推荐指数
1
解决办法
292
查看次数

如何获取 Java 14 方法引用的 MethodInfo?

我本质上是在问与这个老问题相同的问题,但针对的是 Java 14 而不是 Java 8。为了避免回答者导航到老问题的麻烦,我将在这里重新表述。我想从引用的方法中获取函数的名称。下面的 Java 代码应该能让您明白:

public class Main
{
    public static void main(String[] args)
    {
       printMethodName(Main::main);
    }

    private static void printMethodName(Consumer<String[]> theFunc)
    {
        String funcName = // somehow get name from theFunc
        System.out.println(funcName)
    }
 }
Run Code Online (Sandbox Code Playgroud)

C# 中的等效内容是:

public class Main
{
    public static void Main()
    {
        var method = Main.Main;
        PrintMethodName(method)
    }

    private static void PrintMethodName(Action action)
    {
        Console.WriteLine(action.GetMethodInfo().Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

根据老问题的公认答案,如果没有大量的工作,这在 Java 8 中是不可能的,例如这个解决方案。Java 14中有更优雅的解决方案吗?

java reflection lambda java-14

0
推荐指数
1
解决办法
182
查看次数

Java 符号不再出现在系统首选项中,但仍被安装

我必须处理一个关于在我的 mac 上安装 Java 的令人困惑的问题:

  • 如果我转到系统首选项,则不再有 Java 符号: 在此处输入图片说明

  • 但是如果我java -version在终端中输入,我会得到

    java version "14" 2020-03-17 Java(TM) SE Runtime Environment (build 14+36-1461) Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)

所以,似乎仍然安装了Java。

我的系统:macOS High Sierra 版本 10.13.6

java macos java-14

-1
推荐指数
1
解决办法
121
查看次数

在 Java 14 中写入 Record 字段

通过对 Java 14 中 Records 的介绍的简短搜索,我看到 Record 字段被编译为最终实例变量。这似乎意味着我不能写入 Record 字段......也没有任何教程提到关于写入 Record 字段的任何内容。

这是为什么?为什么我不能像在 C 中使用结构一样在 Java 14 中使用 Record ?

感谢您的任何见解

java java-14 java-record

-1
推荐指数
1
解决办法
215
查看次数

Java 记录数据类型不适用于网络通信

我认为 Java 14 中新的 Java Record 数据类型应该适用于跨网络的数据,因为数据不应该在过程中发生变化,这是记录数据类型的主要特征 - 不可变。

我使用 RSocket 中的数据类型。在发送方,编码器出现错误。我还没有找到编码器是关于什么的。在接收器端,出现解串器错误。据我所知,记录不能实现诸如 Serializable 之类的接口。

所以,记录数据类型不适用于网络编程,对吗?

更新:

我将 Serializable 接口添加到发送方和接收方的记录定义中。发出请求后,TCP发送端没问题,但接收端报错

No encoder for com.....data.Notification, current value type is class com.....data.Notification
Run Code Online (Sandbox Code Playgroud)

那些标记这个问题的人有不同的经历吗?

java java-14 java-record

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