我是Java新手,我问这个问题只是为了帮助我更好地理解OOP。
假设我正在定义一个名为Hour的新类。要实例化此类,我们需要指定一个整数来指示此实例的小时。
Hour hr = new Hour(16); // this means to define an hour that indicates 4pm.
因此,当我们在此定义Hour Class时,构造函数的参数应在[0,24]范围内。我们如何定义这样的参数,如果指定了超出此范围的参数,我可以抛出错误吗?
感谢。
答案 0 :(得分:4)
您可以使用IllegalArgumentException。
抛出表示方法已被传递非法或不恰当的参数 例子
public class Hour
{
Hour(int hour)
{
if(hour>=24 || hour<0)
{
throw new IllegalArgumentException("Hour should in the range of [0-23].");
}
}
...............
}
答案 1 :(得分:1)
如果您希望编译器捕获错误,您可以定义小时的枚举,然后将其用作Hour
的构造函数的参数。但这可能会使Hour
类毫无用处。
public class Hours {
_1, _2, _3, // etc.
}
public class Hour {
public Hour(Hours hour) { // no need for runtime check here, can not be wrong}
}
Hour hour = new Hour(Hours._3);
这种技术在这里可能不是最好的,但通常最好依赖编译时检查而不是运行时检查。
答案 2 :(得分:1)
不幸的是,与Pascal和其他语言不同的Java不支持范围类型。但是,您可以使用其他技术。
最简单的方法是检查代码中的值。
class Hour {
private final int h;
public Hour(int h) {
if (h < 0 || h >= 24) {
throw new IllegalArgumentException("There are only 24 hours");
}
this.h = h;
}
}
您还可以使用更复杂的技术。看看java Validation API 在这种情况下,您的代码将如下所示:
class Hour {
@Max(23)
@Min(0)
private final int h;
public Hour(int h) {
this.h = h;
}
}
但是你必须使用这个API的一个可用实现并调用它。