构造函数错误 - 无法应用于给定类型

时间:2018-06-14 12:43:17

标签: java csv

我正在写一个CSV解析器,即将完成,但我有一个带有返回方法的issuse。代码与此站点几乎相同,但我仍然会收到错误。

private static Book createBook(String[] metadata) {
    String name = metadata[0];
    int price = Integer.parseInt(metadata[1]);
    String author = metadata[2];

    //Create and return book of this metadata
    return new Book(name, price, author);
}

我收到错误:

Error:(128, 16) java: constructor Book in class java.awt.print.Book cannot be applied to given types;
required: no arguments
found: java.lang.String,int,java.lang.String
reason: actual and formal argument lists differ in length 

我不确定是什么导致了这个错误,我已经处理了这个问题好几个小时了。提前谢谢。

2 个答案:

答案 0 :(得分:2)

证据:

  1. 编译错误消息涉及java.awt.print.Book

  2. 您的代码正在尝试创建Book,如下所示:new Book(name, price, author)

  3. 分析:这些参数对java.awt.print.Book实例毫无意义。后者javadoc说:

      

    Book类提供文档的表示,其中页面可能具有不同的页面格式和页面画家。此类使用Pageable接口与PrinterJob进行交互。

    因此,当您真正意图导入/使用自己的java.awt.print.Book课程时,您似乎意外地将Book导入了您的课程。这可能是由于不适当的"自动更正"从你的IDE提示。

    解决方案:删除/替换伪造的导入声明。

答案 1 :(得分:0)

错误的具体原因是,Book包中的java.awt.print类只有零参数构造函数,因此只能像这样实例化:

Book b = new Book();

这里有一些可能不时发生的事情。 JDK API经常提供可能声音的类,就像我们可以将它们用于我们的项目,但通常它们的名称有点误导性,或者所需的功能不可用。

如果是这样的话,你应该创建/使用自己的类。

假设您已经有类似于这个的书类:

public class Book
{

  private final String name;
  private final int price;
  private final String author;

  public Book( String name, int price, String author )
  {
    this.name = name;
    this.price = price;
    this.author = author;
  }

  // Getter....
}

您必须为项目导入正确的一个。

您可以通过添加正确的import语句来执行此操作:

import all.my.packages.Book

您可能遇到的另一个问题是,如果您想使用自己的Book版本,还要使用java.awt.print包中的版本。现在我们遇到名称冲突,你必须在使用时指定每个对象:

public static void main( String[] args )
{

  String author = "SomeAuthor";
  String name = "SomeBook";
  int price = 30;

  java.awt.print.Book awtBook = new java.awt.print.Book(); 
  playground.test.main.Book myBook = new playground.test.main.Book( name, price, author );

}

但这是你想要在大多数时间里避免的东西。