gpt4 book ai didi

Java:无法使用 getConstructor() 捕获异常

转载 作者:行者123 更新时间:2023-12-01 19:22:05 24 4
gpt4 key购买 nike

我编写了一个抽象类“Card”,其中包含两个名为“Sticker”和“PlayingCard”的子类。 “PlayingCard”类有一个名为“Color”属性的枚举对象,它基本上说明了它是什么类型的牌(红心、黑桃……)。在此枚举中,我有一个基于字符串返回对象的方法:如果我向其传递字符串“黑桃”,它将返回一个包含 SPADES 的对象。如果传递给它的字符串不作为卡片类型存在(所以不是红心、黑桃……),它会抛出一个自制的“TypeUnknownException”。这个异常只是调用它的super(String message)。

现在,当在不同的类中读取文件并创建 Card 对象时:

Card c= (Card) Class.forName(one).getConstructor(String.class, double.class).newInstance(two, three);

one 是 txt 文件中的字符串(始终是一个实现的类名,如 Sticker 或 Playingcard,two 是从 txt 文件中获取的字符串(应该是像黑桃这样的卡片类型,但可以不同,这应该抛出异常,并以此字符串作为消息),并且 是来自 txt 文件的已解析 double 。

这将调用 Sticker 或 PlayingCard 的构造函数。当它从 PlayingCard 调用构造函数时,它应该能够抛出我的“TypeUnknownException”,这样我就可以捕获它并将其添加到一串错误消息中以在最后打印出来。但是,当我 try catch 该异常时,编译器表示它从未抛出。我知道这是因为它还不知道它可以调用抛出异常的构造函数,但是有没有办法捕获该异常,并且仅捕获该异常(不能捕获所有异常,它必须抛出其他异常)?

供引用:PlayingCard 类中的代码:

public PlayingCard(String col, double worth) throws TypeUnknownException{
this(col,(int)worth);
}

PlayingCards 只接受整数作为其值,但由于 Card 类必须接受 double 值,所以有上面额外的构造函数

public PlayingCard(String col, int w) throws TypeUnknownException{
this.color= Color.getColorWithName(col.toUpperCase());
this.worth= w;}

以及枚举 Color 中的 getColorWithName 方法:

public static Color getColorWithName(String name) throws TypeUnknownException{
if(name.equalsIgnoreCase("Spades")){return SPADES;}
else if(name.equalsIgnoreCase("Hearts")){return HEARTS;}
else if(name.equalsIgnoreCase("Clovers")){return CLOVERS;}
else if(name.equalsIgnoreCase("Tiles")){return TILES;}
else throw new TypeUnknownException(name);
}

其他可能有用的东西:当我在异常的构造函数中添加打印时,它能够打印不存在的卡片类型的名称。所以肯定会抛出异常,我只是不知道如何捕获它。

编辑:由于一条评论,我意识到我忘记提及,当捕获 InvocableTargetException 时(甚至捕获所有相关内容)总是给我消息“null”。

Edit2:答案:问题是 getMessage() 方法不适用于包装类 InvocableTargetException。当使用 getTargetException().getMessage() 时,代码工作正常。感谢用户:207421的帮助。

最佳答案

问题在于 getMessage() 方法不适用于包装类 InvocableTargetException。我对 java API 的缺乏经验让我忽略了这一点。当使用 getTargetException().getMessage() 时,代码工作正常。感谢https://stackoverflow.com/users/207421/user207421寻求帮助。

关于Java:无法使用 getConstructor() 捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59347266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com