我正在写一个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
我不确定是什么导致了这个错误,我已经处理了这个问题好几个小时了。提前谢谢。
答案 0 :(得分:2)
证据:
编译错误消息涉及java.awt.print.Book
您的代码正在尝试创建Book
,如下所示:new Book(name, price, author)
分析:这些参数对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 );
}
但这是你想要在大多数时间里避免的东西。