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 & hashCodetoString。我们可以选择编写显式构造函数来验证输入。

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 - 它会更具表现力。