如何解决我需要Java自定义自动装箱
键入函数的参数时,我需要自动将java.lang.Number
转换为类org.expr.NumberExpression
。对于两个参数,我最终编写了四个非常相似的方法:
public class Assemble {
public NumberExpression add(NumberExpression a,NumberExpression b) {
// do something
}
public NumberExpression add(NumberExpression a,Number b) {
return add(a,new NumberConstant(b));
}
public NumberExpression add(Number a,Number b) {
return add(new NumberConstant(a),NumberExpression b) {
return add(new NumberConstant(a),b);
}
}
所以我可以输入:
assemble.add(5,assemble.add(7,3));
assemble.add(5,3),8,15); // does not work
但是,我认为这对于10个参数(我想做的)变得难以管理。我想我需要写1024个类似的方法。
public NumberExpression add(NumberExpression... numbers) {
// do something
}
但是我可以输入混合在一起的Number
和NumberExpression
作为参数吗?
解决方法
- 正如人们所说的那样
- 您通常如何解决的问题是您自己包装值并只有一种方法(请看BigDecimal)
assemble.add(
new IntegerConstant(5),assemble.add(new IntegerConstant(7),new IntegerConstant(3))
或使用工厂:
assemble.add(
NumberExpression.of(5),assemble.add(NumberExpression.of(7),NumberExpression.of(3))
其中:
class NumberExpression {
public static IntegerConstant of(Integer v) {
//...
}
public static DoubleConstant of(Double v) {
//...
}
}
,
否,您无法定义自定义自动装箱
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。