如何实现 void add(Number number) 以便将 number 添加到对象实例
public interface Numbers {
static int toIntValue();
static void fromIntValue(int value);
default void add(Number number) {
// what do i write here
}
}
最佳答案
你通常无法做到这一点;接口(interface)没有任何状态,“添加数字”的概念强烈暗示您希望更新状态。
这是一种方法:
public interface Number /* Isn't Numbers a really weird name? */ {
int toIntValue();
default int add(int otherValue) {
return toIntValue() + otherValue;
}
}
这里没有改变状态;相反,返回一个新的 int。
这里的另一个问题是,抽象数字类型的整个概念是,没有 add 的默认实现。
这只是基础数学。复数是数字的一种; 在事先不了解任何关于复数的情况下编写将 2 个复数相加的代码显然是不可能的。
您可以做的是从其他原语中创建add,除了“add”通常是方便的原语。例如,下面是一个可以作为默认方法的乘法,尽管它效率不高:
public interface Number {
Number plus(Number a); /* an immutable structure makes more sense, in which case 'plus' is a better word than 'add' */
default Number multiply(int amt) {
if (amt == 0) return Number.ZERO; // Define this someplace.
Number a = this;
for (int i = 1; i < amt; i++) a = a.plus(this);
return a;
}
}
这里您已经用加号定义了乘法。
请注意,java 已经有了一个抽象数字概念 (java.lang.Number
),而且它确实几乎无能为力,因为在任何语言中尝试像这样抽象数学都是困难的,尤其是这样在java中。
关于java - 如何实现为对象实例添加值的默认接口(interface)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59237107/