java - 尽管方法在 .class 文件中,但在运行类时获取 NoSuchMethodException

标签 java intellij-idea gradle amazon-dynamodb

我正在为我大学的一个项目编写后端,遇到了一个我不理解的错误。

我正在使用 IntelliJ、Gradle 并使用 Spock 作为测试环境。 如果该项目的目标是利用亚马逊的 NoSQL 数据库解决方案 DynamoDB。 使用 AmazonDB Local 测试后端方法。

目前我正在为后端的各种方法编写测试......或者至少我尝试过。 当我运行我的第一个测试时,只要到达“GetBookWithTitle”方法,我就会得到一个 NoSuchMethodException。 (有趣的事实:“AddBook”方法似乎工作正常)。

这是测试代码:

def "Test adding a book to the database"(){
    when: "Adding a book"
        methods.AddBook("TestBook", "Sebastian Müller", 1990, "Gregors", "FunkyTestCover", mapper);

    then: "The book should be added"
        methods.GetBookWithTitle("TestBook", mapper) != null;
}

这是“GetBookWithTitle”方法的来源:

public Book GetBookWithTitle(String title, DynamoDBMapper mapper){
    Book result = mapper.load(Book.class, title);
    return result;
}

我尝试过的: - 使用相应的 gradle 任务清理项目 - 手动删除项目的“build”文件夹 - 反编译 .class 文件以确保存在“GetBookWithTitle”

所以我的问题是:有人知道这个错误的来源吗?

如果提供的信息不够,我会给你更多:)

最佳答案

好的,我找到了答案。它完全是另一回事,与 DynamoDB 及其将数据库项映射到 Java 类的功能相关。 映射器类显然需要一个标准的构造函数,而我的 Book 类没有。

对于那些感兴趣的人:

DynamoDBMapper.load 方法在内部调用 Class.NewInstance()。此方法只能使用不带参数的标准构造函数/构造函数。由于我的类中没有这样的构造函数,他抛出了 NoSuchMethodException。

关于java - 尽管方法在 .class 文件中,但在运行类时获取 NoSuchMethodException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26805760/

相关文章:

java - 父类和实现接口(interface)中同名的静态和非静态方法

java - 关于自定义比较器

android - 添加Leanback库时获取DexArchiveMergerException

java - 如何使用Gradle添加 “jdbc”插件

java - Intellij IDEA 中的 2 个 java 项目有什么区别? - 无法刷新 Gradle

java - Mockito spy 引用了错误的对象

java - 现在用Applet画线全乱了

java - 如何从Intellij的Gradle的checkstyle中排除文件夹

java - 方法签名处的断点会减慢调试器的速度

macos - Intellij IDEA 2016.2 不响应 OSX 上的鼠标点击