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

3

在Java中是否有一种声明方法参数的方式,它是某种集合,但具有有限的大小?

例如,类似于:

public Car(String colour, Wheel[4])

建议可以根据颜色和4个轮子来构造一辆车。(显然,通过更改方法以枚举4个轮子作为单独的参数可以实现这个特定的示例,但这不具有可扩展性)
似乎这些约束条件应该可以通过方法头来表达,但我无法想出Java如何允许它。
4个回答

5

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


2
cough ADA还是PASCAL?cough - user166390
1
@pst:我并不是说这样的类型系统不可能存在,只是它无法与Java类型系统的其他部分协同工作。 - Jon Skeet

2
您可以通过创建特定的列表将Wheel[4]包装在新类中。

这其实是我会做的事情,因为车轮通常都连接在汽车的底盘上,而底盘决定了汽车能装几个车轮。 - Esko

1

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

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);
...
}

0
现在你可以使用cofoja - http://code.google.com/p/cofoja/ 来处理这种和其他输入/输出限制。
@Requires("wheels.length == 4")
public Car(String colour, Wheel[] wheels)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接