gpt4 book ai didi

java - 如何访问try block 中的参数?

转载 作者:行者123 更新时间:2023-12-01 07:29:25 25 4
gpt4 key购买 nike

我有一个类,Line,它以 vector 形式给出的两个点作为参数,并对它们之间传递的无限直线进行建模。第二个类 BoundedLine 采用两个点并对连接它们的有限线进行建模。

如果两个点相同,Line 会抛出异常,这意味着对 BoundedLine 中 super 构造函数的调用需要包装在 try catch block 中。不幸的是,这些参数似乎在 try block 内不可用;我如何访问它们?

// Constructor in Line
public Line (Vector start, Vector end) throws Exception {

if (start.equals (end)) {
throw new Exception ( "Points are the same" );
}

else {

this.start = start;
this.end = end;

modelLine (start, end);
}
}

// Constructor in BoundedLine
public BoundedLine (Vector start, Vector end) throws Exception {

try {
super (start, end);
}
catch (Exception e) {
throw e;
}

applyBoundaries (start, end);
}

我收到以下编译时错误:“类 Line 中的构造函数 Line 不能应用于给定类型;必填: vector , vector ;发现:没有参数;原因:实际参数列表和正式参数列表的长度不同”。

如果我删除异常和 try/catch block ,那么代码就可以正常工作。

最佳答案

如果您声明您的 BoundedLine 构造函数抛出异常,则无需捕获

无论如何,对父类(super class)构造函数的调用必须是子类构造函数中的第一行

试试这个:

public BoundedLine (Vector start, Vector end) throws Exception {
super (start, end);
applyBoundaries (start, end);
}

我还要补充一点,抛出Exception是一个很大的禁忌,因为您应该抛出一个特定的异常。 JDK 中已有一个未经检查的 IllegalArgumentException 可供您使用。如果您想要一个已检查的异常,我建议您创建自己的异常。

public Line (final Vector start, final Vector end) {
if (start.equals (end)) {
throw new IllegalArgumentException( "Points are the same" );
}
this.start = start;
this.end = end;
modelLine (start, end);
}

此外,您正在使用Vector,它是

  1. 原始类型 - 请阅读 Generics
  2. 已过时的集合类型,请使用List。请阅读 Collections

关于java - 如何访问try block 中的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19380758/

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