【发布时间】:2020-01-24 00:39:15
【问题描述】:
我有一个代码如下所示的类,我希望在其中使用任何代表数字的类/类型都是微不足道的。我发现自己定义了大量的方法,如下所示:
public class Range {
private BigDecimal inferior = new BigDecimal(0);
private BigDecimal superior = new BigDecimal(1);
public Range(BigDecimal inferior, BigDecimal superior) {
if (inferior.compareTo(superior) == -1) {
this.inferior = inferior;
this.superior = superior;
}
}
public Range(int inferior, int superior) {
this(new BigDecimal(inferior), new BigDecimal(superior));
}
public Range(Integer inferior, Integer superior) {
this(new BigDecimal(inferior), new BigDecimal(superior));
}
public Range(float inferior, float superior) {
this(new BigDecimal(inferior), new BigDecimal(superior));
}
public Range(double inferior, double superior) {
this(new BigDecimal(inferior), new BigDecimal(superior));
}
}
我什至没有写出所有可能的组合!例如,一个采用 float 和 double,或 int 和 BigDecimal。
如何以一种干净的方式实现这一点,以便有对已经预定义的多个类/数据类型有效的参数,甚至是原语?我已经考虑过适配器和代理,但我经常发现自己不理解这些解释,我无法弄清楚它们是否适合我的用例以及如果适合的话如何 - 这个问题可能已经在 SO 上得到了回答,但如果是这样的话,至少我想看看是否有人可以根据这个特定的例子向我解释。
【问题讨论】:
-
您可能想查看using generics。不过,泛型不适用于基元,因此您必须为基元类型使用相应的包装类。这也可能允许您将 Ranges 扩展到纯数字类之外。
-
使用
BigDecimal(String)。有关详细信息,请参阅我的答案。
标签: java oop adapter dynamic-proxy