我有2个相似的类,一个接收1个参数(让我们说int类型),另一个接收相同类型的参数两次。对于这两个输入,我需要进行相同的检查(如果数据不好则抛出异常)并且这两个类都有一些功能。
我想创建的超类型将有2个构造函数,一个带有1个参数,另一个带有2个参数。这将有效,但问题是,如果有三个或更多参数的选项,应该怎么做。
所以如果有更好的选择,我想在这里试试。
感谢。
答案 0 :(得分:1)
如果可以选择有三个或更多参数,应该怎么做?
尝试使用Varargs,它需要使用任意数量的值来创建数组,并在调用方法/构造函数之前将值放入数组中。
阅读Eclipse中Varargs的章节。
arargs是一种辅助语法,它允许在方法调用中使用可变数量的参数。在方法定义中,变量aruguments由 elipsis(...)表示,在java语言规范中称为variable arity method
和variable arity parameter
。在调用varargs方法时,我们可以使用任意数量的指定类型的参数,并用逗号分隔。
public class VarArgSample {
static int sum(int i, int... marks) {
int total = 0;
for (int mark : marks) {
total = total + mark;
}
return total;
}
public static void main(String[] args) {
// invoking with variable arguments
System.out.println(sum(1, 2, 3));
// same invocation using an array
int arr[] = { 2, 3 };
System.out.println(sum(1, arr));
}
}
当使用变量参数调用时,编译器将参数列表从左到右与形式参数匹配。一旦匹配了初始参数集,那么剩下的任何参数都被构造为数组并传递给该方法。
在给定的示例中,值'1'作为变量'i'的参数传递,然后除了varargs之外没有剩余的其他参数。所以剩下的值'2,3'被构造为数组并作为参数传递。这就是动力的实现方式。
在您的情况下,可以选择使用三个或更多参数,然后只需使用
MyClass(int i, int j, int... k){}