类中的构造函数不能应用于给定类型。希望得到帮助
Posted
技术标签:
【中文标题】类中的构造函数不能应用于给定类型。希望得到帮助【英文标题】:Constructor in class cannot be applied to given types. Hope for assistance 【发布时间】:2013-10-07 05:18:07 【问题描述】:我对@987654321@ 还很陌生,我正在使用BlueJ
。我不断收到错误:
constructor ItemNotFound in class ItemNotFound cannot be applied to given types;
required: int
found: no arguments
reason: actual and formal arguments lists differ in length
我很困惑,不知道如何解决这个问题。希望有人可以帮助我。提前谢谢你。
这是我的班级目录:
public class Catalog
private Item[] list;
private int size;
// Construct an empty catalog with the specified capacity.
public Catalog(int max)
list = new Item[max];
size = 0;
// Insert a new item into the catalog.
// Throw a CatalogFull exception if the catalog is full.
public void insert(Item obj) throws CatalogFull
if (list.length == size)
throw new CatalogFull();
list[size] = obj;
++size;
// Search the catalog for the item whose item number
// is the parameter id. Return the matching object
// if the search succeeds. Throw an ItemNotFound
// exception if the search fails.
public Item find(int id) throws ItemNotFound
for (int pos = 0; pos < size; ++pos)
if (id == list[pos].getItemNumber())
return list[pos];
else
throw new ItemNotFound(); //"new ItemNotFound" is the error
作为参考,这里也是class ItemNotFound
的代码:
// This exception is thrown when searching for an item
// that is not in the catalog.
public class ItemNotFound extends Exception
public ItemNotFound(int id)
super(String.format("Item %d was not found.", id));
【问题讨论】:
【参考方案1】:您为您的类 ItemNotFound
提供了一个自定义构造函数,并且在使用它时未传递所需的参数。
尝试在此处传递所需的参数
throw new ItemNotFound(id);
所以你的代码变成了
public Item find(int id) throws ItemNotFound
for (int pos = 0; pos < size; ++pos)
if (id == list[pos].getItemNumber())
return list[pos];
else
throw new ItemNotFound(id); // Now constructor satisfied
还有
throw new ItemNotFound();
当你的班级ItemNotFound
是这样的时候,上面那句话是真的
// This exception is thrown when searching for an item
// that is not in the catalog.
public class ItemNotFound extends Exception
public ItemNotFound()
super("Sorry !! No item find with that id"); //Now a generic message.
【讨论】:
【参考方案2】:throw new Item() 无效,因为已定义显式构造函数 Item(int id)。
【讨论】:
请再来。我不明白这与问题有什么关系。 对不起,我的错误,我以为您将 int 参数传递给构造函数: super(String.format("Item %d was not found.", id));它存在于目录类中。实际上, throe new Item() 是无效的,因为您已经定义了一个显式的构造函数 item(int id)...请忽略我之前的回答。 编辑您的答案并将其发布在此处。在 cmets 中没有。【参考方案3】:ItemNotFound
类只有一个构造函数:一个带有 int
参数的构造函数:
public ItemNotFound(int id)
你试图在没有任何参数的情况下调用它:
throw new ItemNotFound();
这是行不通的——你需要为那个参数传递一个参数。我怀疑你只是想要:
throw new ItemNotFound(id);
(假设find
方法的id
参数是您要查找的ID。)
此外,我建议您重命名您的异常以包含 Exception
的后缀以遵循 Java 命名约定 - 所以 ItemNotFoundException
。
您还需要更改您的循环 - 如果 first 值没有正确的 ID,目前您将抛出异常,而您可能想要遍历所有这些。所以你的find
方法应该是这样的:
public Item find(int id) throws ItemNotFoundException
for (int pos = 0; pos < size; ++pos)
if (id == list[pos].getItemNumber())
return list[pos];
throw new ItemNotFoundException(id);
【讨论】:
【参考方案4】:你提供了一个没有任何参数的构造函数。
public ItemNotFound()
并且您正在调用new ItemNotFound(id)
,它在创建ItemNotFound 类的实例时需要一个带有one parameter of type int
的构造函数。所以你需要有一个重载的构造函数
public class ItemNotFound extends Exception
public ItemNotFound()
super("Sorry !! No item find with that id"); //Now a generic message.
public ItemNotFound(int if)
this(); //Since you are not using any int id in this class
【讨论】:
以上是关于类中的构造函数不能应用于给定类型。希望得到帮助的主要内容,如果未能解决你的问题,请参考以下文章
错误:类 SpotsDialog 中的构造函数 SpotsDialog 不能应用于给定类型;
firebasex 错误:类 Builder 中的构造函数 Builder 不能应用于给定类型
android:如何修复类 CardsActivity.CardPagerAdapter 中的错误构造函数 CardPagerAdapter 不能应用于给定类型
Java错误排查无法将类中的构造器应用到给定类型 无法将类 uiauto.web.common.OperationNewLabelPageImpl中的构造器 OperationNewLabe