【问题标题】:Best Way to Support Increment and Decrement in Template Class模板类支持递增和递减的最佳方式
【发布时间】: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 在超出范围时会抛出。

标签: java generics


【解决方案1】:

如果您需要泛型,则没有其他变体。这是泛型的主要目的——检查类在编译时有方法。但是您可以使用反射编写此功能。检查对象在运行时是否有增量方法并调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2011-12-13
    • 2018-08-08
    • 2017-01-12
    • 2012-04-29
    • 2011-04-09
    相关资源
    最近更新 更多