【发布时间】:2013-12-18 16:04:17
【问题描述】:
我想创建一个模板函数,它依赖于泛型类型支持++ 和-- 的能力。众所周知,Java 确实 不 支持运算符重载,所以显然我需要定义一个需要 increment() 和 decrement() 函数的接口:
public interface Quantized<E> extends Comparable<E> {
public <E extends Quantized> E increment();
public <E extends Quantized> E decrement();
}
public class Sequencer<E extends Quantized>{
private E value;
public <E extends Quantized> E doSometingWithSequence(){
...
E rv = value.increment();
return rv;
}
}
如果我希望模板支持任何类,那么即使知道一个接口说支持++ 和-- 也是不够的,因为Java 不允许我们为类实现运算符。 但是,如果允许模板函数支持 Integer 等类型而不需要包装类来实现 interfaceQuantized,那就太好了。
有没有办法定义一个新的接口(除了定义一个抽象类)?
【问题讨论】:
-
在没有包装器的情况下以相同的方式处理基元和对象是很棘手的。 Primatives 是为速度而构建的,而不是为了与 java 的其余部分保持一致
-
你可以为Number写一个包装器。
-
如果你想查看 amelentev.github.io/java-oo 在 java 中的运算符重载
-
你想达到什么目的?
-
@ElliottFrisch 我正在考虑这个选项。唯一的问题是我可能需要在递增和递减期间进行一些边界检查,我想我认为 Number 在超出范围时会抛出。