gpt4 book ai didi

java - 如何返回与传入的具体类型相同的 Number 对象?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:47:16 25 4
gpt4 key购买 nike

我有以下不完整的类(class)。它实现了一个方法,将任意Number 对象作为参数,将其约束到一个存储在long 中的限制,然后返回原始值或约束值。但是,返回的约束值必须与输入参数具有相同的具体类型。

public class Max implements Constraint {

long max;

public Number constrain(Number n) {
if (n.longValue() <= max) {
return n;
}
// return a number of the type passed in with value max
}
}

关于创建与另一个相同类型的对象还有其他问题,但答案假定无参数构造函数可用,而数字类型不是这种情况。

我玩过:

n.getClass().getConstructor(new Class<?>[] { n.getClass() }).newInstance(max);

但即使在这里,我仍然无法传递正确的参数。我回到原点。无论如何,它都不是很优雅。

我知道我可以用很多 if 语句来做到这一点,但我正在寻找更智能的东西。

最佳答案

因为 Number 的 SubClasses 的构造函数以 primitives 作为参数,所以你不能寻找以 Wrapper Class 作为参数的构造函数

它们都有的构造器,就是String一个

long max;

public Number constrain(Number n) {
if (n.longValue() <= max)
try{
return n.getClass()
.getConstructor(String.class)
.newInstance(String.valueOf(max));
}catch(Exception ex){ex.printStackTrace();}
return n;
}

public static void main(String[]args){
Max m = new Max();
m.max = 10;
System.out.println(m.constrain(new Double(25)).getClass()); // class java.lang.Double
System.out.println(m.constrain((int) 18).getClass()); // class java.lang.Integer
}

Working DEMO

关于java - 如何返回与传入的具体类型相同的 Number 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50923725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com