首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数代码上的调试流跟踪抛出IncompatibleClassChangeError

函数代码上的调试流跟踪抛出IncompatibleClassChangeError
EN

Stack Overflow用户
提问于 2019-03-23 14:27:05
回答 1查看 1.2K关注 0票数 2

当我试图通过IntelliJ中的stream调试下面代码中的流时,调试器无法计算foreach,因为下面的错误是抛出的。我不知道它是关于什么的,代码本身运行良好。

完全更新的IntelliJ社区版本,JUnit 5,Spring,Maven,Java11。

仅在流跟踪调试期间发生的错误:

com.progonkpa.file.FileService$GeneratedEvaluationClass$5类型不是com.progonkpa.file.FileService的嵌套成员:类型在不同的包中

包含流的代码:

代码语言:javascript
复制
public class FileService {

    public void createDirs(File parentDir, String[] fileNames) {
        Stream.of(fileNames)
                .map(fileName -> new File(parentDir, fileName))
                .forEach(file -> {
                    if (file.mkdirs())
                        System.out.println("Created file: " + file);
                    else
                        System.err.println("Failed to create file: " + file);
                });
    }
}

调用上述方法的测试:

代码语言:javascript
复制
public class FileServiceTest {

    private FileService fileService = new FileService();

    @Test
    public void generateDirs_createsList() {
        File tmpDir = new File("/tmp");
        String[] dirNamesList = {"dir1", "dir2"};
        File createdDir1 = new File(tmpDir, dirNamesList[0]);
        File createdDir2 = new File(tmpDir, dirNamesList[1]);

        fileService.createDirs(tmpDir, dirNamesList);

        assertTrue(createdDir1.exists());
        assertTrue(createdDir2.exists());
        assertTrue(createdDir1.delete());
        assertTrue(createdDir2.delete());
        assertTrue(tmpDir.delete());
    }
}

pom.xml

代码语言:javascript
复制
<?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 http://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.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.unknown.somefunction</groupId>
    <artifactId>joske</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <java.version>11</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-test</artifactId>-->
            <!--<scope>test</scope>-->
        <!--</dependency>-->
        <!--Data processing-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-csv</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>org.simplejavamail</groupId>
            <artifactId>simple-java-mail</artifactId>
            <version>5.1.3</version>
        </dependency>
        <dependency>
            <groupId>org.simplejavamail</groupId>
            <artifactId>outlook-message-parser</artifactId>
            <version>1.1.17</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>com.github.vatbub</groupId>
            <artifactId>mslinks</artifactId>
            <version>1.0.5</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>5.3.2</version>
            <scope>test</scope>
        </dependency>
        <!--Testing-->

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-23 14:39:12

显然,Stream调试器生成字节码,并动态定义类来计算表达式。相关源文件为

CompilingEvaluator.java

CompilingEvaluatorImpl.java

在YouTrack上有一个当前尚未解决的问题,除了完全相同的例外

代码语言:javascript
复制
Type some.Type$GeneratedEvaluationClass$1 is not a nest member of some.Type: types are in different packages

IDEA-204665

这只显示在大于10的JDK版本上,不幸的是,您有

代码语言:javascript
复制
<java.version>11</java.version>

正如问题所表明的那样,它的发生是因为

JDK 11具有“基于巢的访问控制”功能。 (https://cr.openjdk.java.net/~dlsmith/nestmates.html)

9月181

对其他工具的影响 任何在类文件上操作、生成或处理字节码的工具都可能受到这些更改的影响。至少,此类工具必须容忍新的类文件属性的存在,并允许字节码规则的更改。例如: javap检查工具、Pack200实现和ASM字节码操作框架(也在JDK内部使用)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55314726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档