是否有一种干净的方法来定义每个实现 class 具有不同参数的 Java 接口方法?
Is there a clean way of defining a Java interface method that has different parameters for each implementation class?
例如,假设我有一个定义方法 action(...)
的接口,并且我有三个(实际上更多)class 使用不同参数实现 action
的 es :
public class Class1 implements SomeInterface {
public int action(int num) { ... }
}
public class Class2 implements SomeInterface {
public String action(String string) { ... }
}
public class Class3 implements SomeInterface {
public double action(double dub) { ... }
}
我觉得这不可能,但必须有某种方式告诉用户这些 class 中的每一个都有一个 action
方法;也许有办法让它动态接受参数?
编辑: 如果我们不知道只有一个参数怎么办?例如,这样的事情可能吗?
interface SomeInterface<T, T, ..., T> {
T action(T t1, S s, ..., U u);
}
我觉得这是一个非常难运行ge 的问题,所以我将尝试提供更多背景信息。我正在开发一款纸牌游戏,其中有不同的动作卡可以做不同的事情,并且需要不同的信息。我认为这里应该有一个 Action Card 接口,但后来我 运行 讨论了当每个实现 class 需要完全不同的参数和不同的 [=26= 时如何指定 action
的问题]number 个参数,而不是它们以不同的方式实现完全相同的方法,或者它们每个都需要相同数量的参数。出于这个原因,我的理解是泛型在这里不起作用,但也许我错了,或者有更好的方法可以做到这一点;也许界面从一开始就是错误的方式?
您可以使用 generics:
interface SomeInterface<T> {
T action(T t);
}
class Class1 implements SomeInterface<Integer> {
public Integer action(Integer i) { return null; }
}
class Class2 implements SomeInterface<String> {
public String action(String s){ return null; }
}
class Class3 implements SomeInterface<Double> {
public Double action(Double d) { return null; }
}
泛型只能用于对象类型,因此您必须使用基元包装器而不是基元。
例如,假设我有一个定义方法 action(...)
的接口,并且我有三个(实际上更多)class 使用不同参数实现 action
的 es :
public class Class1 implements SomeInterface {
public int action(int num) { ... }
}
public class Class2 implements SomeInterface {
public String action(String string) { ... }
}
public class Class3 implements SomeInterface {
public double action(double dub) { ... }
}
我觉得这不可能,但必须有某种方式告诉用户这些 class 中的每一个都有一个 action
方法;也许有办法让它动态接受参数?
编辑: 如果我们不知道只有一个参数怎么办?例如,这样的事情可能吗?
interface SomeInterface<T, T, ..., T> {
T action(T t1, S s, ..., U u);
}
我觉得这是一个非常难运行ge 的问题,所以我将尝试提供更多背景信息。我正在开发一款纸牌游戏,其中有不同的动作卡可以做不同的事情,并且需要不同的信息。我认为这里应该有一个 Action Card 接口,但后来我 运行 讨论了当每个实现 class 需要完全不同的参数和不同的 [=26= 时如何指定 action
的问题]number 个参数,而不是它们以不同的方式实现完全相同的方法,或者它们每个都需要相同数量的参数。出于这个原因,我的理解是泛型在这里不起作用,但也许我错了,或者有更好的方法可以做到这一点;也许界面从一开始就是错误的方式?
您可以使用 generics:
interface SomeInterface<T> {
T action(T t);
}
class Class1 implements SomeInterface<Integer> {
public Integer action(Integer i) { return null; }
}
class Class2 implements SomeInterface<String> {
public String action(String s){ return null; }
}
class Class3 implements SomeInterface<Double> {
public Double action(Double d) { return null; }
}
泛型只能用于对象类型,因此您必须使用基元包装器而不是基元。