У меня есть класс с кодом, подобным следующему, где я хочу, чтобы использование любого класса/типа, представляющего число, было тривиальным. Я обнаруживаю, что определяю большое количество методов, например следующие:
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, но если да, то по крайней мере Я хотел бы посмотреть, может ли кто-нибудь объяснить мне это в соответствии с этим конкретным примером.
BigDecimal(String)
. Смотрите мой ответ для более подробной информации. - person Dioxin   schedule 25.09.2019