Java 中的抽象接口方法中有没有办法要求将特定值作为参数?
Is there a way to require a particular value as a parameter in an abstract Interface method in Java?
我正在编写一个小功能接口和它包含的方法,采用一个 int 作为参数。我想知道是否有任何方法可以检查何时调用此方法,传递给该方法的值不会超过某个值,如果超过,则抛出错误。我可以添加注释吗?
这是我的界面的样子
public interface DrawCardHandler{
void onDrawCard(int slot);
}
定义一个class
与其传递一个纯粹的 int
原语,不如定义一个 class 来表示您的特定含义。
public final class Slot {
private int value;
public Slot(int value) { // Constructor.
if(/** your check goes here **/) {
throw new IllegalArgumentException("...");
}
this.value = value;
}
// getter etc. goes here.
}
在 Java 16 及更高版本中,使用 records 功能。记录是编写 class 的一种简短方式,其主要目的是透明且不可变地传递数据。编译器隐式创建构造函数、getter、equals
& hashCode
和 toString
。我们可以选择编写显式构造函数来验证输入。
public record Slot (int value) {
public Slot(int value) { // Constructor.
if(/** your check goes here **/) {
throw new IllegalArgumentException("...");
}
this.value = value;
}
// The getters, equals & hashCode, and toString are implicitly created by compiler.
}
那么您的界面可能如下所示:
public interface DrawCardHandler{
void onDrawCard(Slot slot);
}
定义枚举
一般来说,如果您事先知道所有可能的位置,则可以为 Slot
创建一个枚举,而不是像我展示的那样 class - 它会更具表现力。
我正在编写一个小功能接口和它包含的方法,采用一个 int 作为参数。我想知道是否有任何方法可以检查何时调用此方法,传递给该方法的值不会超过某个值,如果超过,则抛出错误。我可以添加注释吗?
这是我的界面的样子
public interface DrawCardHandler{
void onDrawCard(int slot);
}
定义一个class
与其传递一个纯粹的 int
原语,不如定义一个 class 来表示您的特定含义。
public final class Slot {
private int value;
public Slot(int value) { // Constructor.
if(/** your check goes here **/) {
throw new IllegalArgumentException("...");
}
this.value = value;
}
// getter etc. goes here.
}
在 Java 16 及更高版本中,使用 records 功能。记录是编写 class 的一种简短方式,其主要目的是透明且不可变地传递数据。编译器隐式创建构造函数、getter、equals
& hashCode
和 toString
。我们可以选择编写显式构造函数来验证输入。
public record Slot (int value) {
public Slot(int value) { // Constructor.
if(/** your check goes here **/) {
throw new IllegalArgumentException("...");
}
this.value = value;
}
// The getters, equals & hashCode, and toString are implicitly created by compiler.
}
那么您的界面可能如下所示:
public interface DrawCardHandler{
void onDrawCard(Slot slot);
}
定义枚举
一般来说,如果您事先知道所有可能的位置,则可以为 Slot
创建一个枚举,而不是像我展示的那样 class - 它会更具表现力。