Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java方法参数可以是声明大小的集合吗?_Java_Oop - Fatal编程技术网

java方法参数可以是声明大小的集合吗?

java方法参数可以是声明大小的集合吗?,java,oop,Java,Oop,java中有没有一种方法可以声明一个方法参数,它是某种集合,但大小有限 例如,类似于: public Car(String colour, Wheel[4]) 这表明一辆车可以构造成一种颜色,正好有4个轮子。(显然,这个特定的示例可以通过更改方法来实现,将4个控制盘作为单独的参数枚举,但这不能扩展) 看起来这些类型的约束应该可以通过方法头来表达,但我无法想象java会如何允许它 不,类型系统中没有允许这样做的内容。当然,您可以在执行时进行验证,这是您通常必须做的事情,否则语言很难给出确保数组长

java中有没有一种方法可以声明一个方法参数,它是某种集合,但大小有限

例如,类似于:

public Car(String colour, Wheel[4])
这表明一辆车可以构造成一种颜色,正好有4个轮子。(显然,这个特定的示例可以通过更改方法来实现,将4个控制盘作为单独的参数枚举,但这不能扩展)


看起来这些类型的约束应该可以通过方法头来表达,但我无法想象java会如何允许它

不,类型系统中没有允许这样做的内容。当然,您可以在执行时进行验证,这是您通常必须做的事情,否则语言很难给出确保数组长度完全正确的规则。(像.NET中的代码契约这样的项目允许表达此类内容,但这不是语言本身的一部分……因此不需要精确的规范。)

否。请在运行时检查参数以快速失败:

public Car(String colour, Wheel[] wheels){
    if (wheels == null)
        throw new NullPointerException("The wheels is null.");
    if (wheels.length != 4)
        throw new IllegalArgumentException("The length of wheels is "+wheels.length);
...
}

您可以通过创建特定列表将
控制盘[4]
包装到新类中。

现在您可以使用cofoja-进行此和其他此类输入/输出约束

@Requires("wheels.length == 4")
public Car(String colour, Wheel[] wheels)

咳嗽是艾达还是帕斯卡?cough@pst:我并不是说这样的类型系统是不可能的,只是说它无法与Java类型系统的其他部分一起工作。这实际上是我要做的事情,因为车轮通常连接到汽车的车架上,这决定了汽车可能有多少个车轮。