小编ham*_*uki的帖子

IntelliJ lombok 插件不兼容

IntelliJ IDEA 2020.1(终极版)中的 Lombok 插件与此 IDE 实例不兼容。我不知道是我的机器有问题还是每个人的机器都有问题:

在此处输入图片说明

可以修复吗?还是暂时的问题?

jetbrains-ide intellij-idea lombok

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

如何将此对象转换为泛型类型?

我的理解是泛型类型是不变的,所以如果我们B作为子类型A,则List<B>与之无关List<A>.因此,铸造将无法正常工作的List<A>List<B>.

从Effective Java Third Edition我们有这段代码:

// Generic singleton factory pattern
private static UnaryOperator<Object> IDENTIFY_FN = (t) -> t;

@SuppressWarnings("unchecked")
public static <T> UnaryOperator<T> identifyFunction() {
    return (UnaryOperator<T>) IDENTIFY_FN; //OK But how, why?
}

public static void main(String[] args) {
    String[] strings = {"a", "b", "c"};
    UnaryOperator<String> sameString = identifyFunction();
    for (String s : strings) {
        System.out.println(sameString.apply(s));
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里很困惑.我们已经投下IDENTIFY_FN,其类型UnaryOperator<Object>,对UnaryOperator<T>,它有另一种类型的参数.

当类型擦除发生时String是Object的子类型,但据我所知, …

java generics casting effective-java

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

Java 保留类型名称“var”最佳实践?

不幸的是,Effective Java 中没有任何文章讨论保留类型名称“var”(因为它是在 java 10 中引入的)。

有一种说法是,尽可能使用接口作为类型(条款 64:通过接口引用对象)。但是使用时var

var list = new ArrayList<String>(); // infers ArrayList<String>

list属于类型ArrayList<String>

《Effective Java》指出,通过变量的实现来引用变量是一种不好的做法,因为它会使代码依赖于它。这只是我在代码中开始使用 var 时发现的一个烦恼。

问题:

使用保留类型名称“var”时是否有任何最佳实践?我什么时候应该使用它?我什么时候应该避免它?

java var effective-java java-10

5
推荐指数
0
解决办法
1303
查看次数

无法在 IntelliJ 中编译/运行 Java 项目

问题:

虽然昨天工作正常。今天,我无法编译我的项目(spring-boot)。我创建了一个演示项目来模拟我当前项目中发生的相同问题。

当我尝试使用运行按钮运行项目时,它不想编译。请注意失败编译中的所有错误。此外,您可以看到所有依赖项都已导入(请参阅外部库):

在此处输入图片说明

我知道我可以通过mvn spring-boot:run在终端中输入来运行该应用程序。但出于某种原因,我不想那样做。

可以看到,这个demo是一个简单的spring-boot项目:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demox</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demox</name>
<description>Demo project for Spring Boot</description>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

我试过的:

我尝试了无数的解决方案:

  • 选择Build->Rebuild Project
  • 单击文件>使缓存无效/重新启动
  • mvn clean->构建 …

java intellij-idea maven spring-boot

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

是否可以清除 IntelliJ 剪贴板历史记录

我想清除 IntelliJ 的剪贴板历史记录。我查看了文档,但找不到方法。

我想要清除剪贴板历史记录的原因是我将录制一个视频,在其中调用剪贴板历史记录,并且我不希望观看者看到剪贴板历史记录中不需要的内容。我该怎么做?

非常感谢您的帮助。

clipboard intellij-idea

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

使用类型参数覆盖泛型方法时的编译错误

我知道类型擦除,但这对我来说没有意义。

class Base{
   public <T> Collection<T> transform(Collection<T> list)
   { 
      return new ArrayList<T>(); 
   }
} 
Run Code Online (Sandbox Code Playgroud)

public class Derived extends Base {
    @Override // compilation error
    public Collection<CharSequence> transform(Collection<CharSequence> list) {
        return new HashSet<CharSequence>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的IDE中生成一个错误:

“派生”中的“ transform(Collection)”与“基本”中的“ transform(Collection)”冲突;两种方法具有相同的擦除,但是都不能覆盖另一种方法

我的想法是我们可以transform在编译器没有错误的情况下进行覆盖。为什么transformDerived中不能正确覆盖transformBase中的方法?我知道这与类型擦除有关。我不明白为什么。

java generics overriding

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

即使在 MacOSX 中配置后,我也无法使用 bash 5 语法

我对 bash 比较陌生。

我的 mac 默认安装了 bash 3。

GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)

我相信我已经为 MacOSX 安装并配置了 bash 5。运行bash -version命令输出:

GNU bash, version 5.0.3(1)-release (x86_64-apple-darwin18.2.0)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Run Code Online (Sandbox Code Playgroud)

问题是我无法执行任何 Bash 5 功能,例如此代码使用 bash 4 功能无法输出预期行为:

for i …
Run Code Online (Sandbox Code Playgroud)

macos bash

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

转换为超类时出现StackOverflow错误

我在互联网上找到了以下代码。

 class A {
        public void perform_work() {
            System.out.println("A");
        }
    }
class B extends A {
    public void perform_work() {
        System.out.println("B");
    }
}

class C extends B {
    public void perform_work() {
        ((A) this).perform_work(); // Line 163
    }

    public static void main(String[] args) {
        C c = new C();
        c.perform_work();
    }
}
Run Code Online (Sandbox Code Playgroud)

这段代码可以干净地编译,但是运行时却给我一个错误:

Exception in thread "main" java.lang.StackOverflowError
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163)
    at com.hamzablm.C.perform_work(Main.java:163) …
Run Code Online (Sandbox Code Playgroud)

java stack-overflow

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

等于Object中的实现

我正在阅读Java中的equals方法,我听到人们说==测试引用相等(它们是否是同一个对象)..equals()价值平等的测试(它们在逻辑上是否"相等").

我相信这是真的,但是,如果你看一下源代码.equals(),它只是顺从了==

从Object类:

    public boolean equals(Object obj) {
    return (this == obj);
}
Run Code Online (Sandbox Code Playgroud)

现在我很困惑.我看到的是我们正在测试当前对象是否具有与显式参数相同的引用.它是测试引用相等还是值相等?

java equality equals

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