首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java方法中的多个类型参数,包括现有类和原始数据类型

问Java方法中的多个类型参数,包括现有类和原始数据类型
EN

Stack Overflow用户
提问于 2019-09-24 06:37:03
回答 2查看 284关注 0票数 8

我有一个包含如下代码的类,其中我希望使用任何表示数字的类/类型都很简单。我发现自己定义了大量的方法,如下所示:

代码语言:javascript
复制
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));
    }
}

我甚至还没有写出所有可能的组合!例如,它接受一个浮点数和一个双精度数,或者一个整型和一个BigDecimal。

如何才能以一种干净的方式实现这一点,以便存在对已经预定义的多个类/数据类型有效的参数,甚至是原语?我考虑过适配器和代理,但我经常发现自己不理解这些解释,我不知道它们是否适合我的用例,如果是的话,这个问题可能已经得到了回答,但如果是的话,我至少想看看是否有人可以根据这个特定的例子向我解释它。

EN

回答 2

Stack Overflow用户

发布于 2019-09-24 06:42:55

使用类Number

代码语言:javascript
复制
public Range(Number inferior, Number superior)

Integer, Long, Double -它们都是Number的子类。

或者,使用泛型:

代码语言:javascript
复制
public class Range<T> {
    private T inferior;
    private T superior;

    public Range(T inferior, T superior) {
        this.inferior = inferior;
        this.superior = superior;
    }
}

用法:

代码语言:javascript
复制
Range<Long> rangeLong = new Range<>(0L, 1000000000L);
Range<Double> rangeDouble= new Range<>(0d, 457.129d);
票数 2
EN

Stack Overflow用户

发布于 2019-09-25 02:57:45

来自BigDecimal(String)的文档

这通常是将float或double转换为BigDecimal的首选方法,因为它不会受到BigDecimal(double)构造函数不可预测性的影响。

接受Number,使用String.valueOf转换为字符串,然后传递给BigDecimal

代码语言:javascript
复制
public class Range {
    private BigDecimal inferior;
    private BigDecimal superior;

    public Range(Number inferior, Number superior) {
        this.inferior = new BigDecimal(String.valueOf(inferior));
        this.superior = new BigDecimal(String.valueOf(superior));
    }
}

将自动支持任何扩展Number的类,包括您引入的新类型。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58070970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档