gpt4 book ai didi

java - 如何重写 BigDecimal toString() 方法?

转载 作者:行者123 更新时间:2023-11-30 05:38:58 28 4
gpt4 key购买 nike

我正在开发一个使用 JSP 构建的旧版 Web 应用程序。我被要求在代码中用 BigDecimal 替换 double 。我知道 BigDecimal 的默认 toString() 方法使用科学记数法来呈现数字。在JSP页面输出数字时就会出现问题。我不想用 < fmt:formatNumber type="number".../> 替换每个 ${obj.property} 。所以我想知道是否有办法重写 toString() 方法,以便它会调用 toPlainString() ?我尝试了 cglib,但意识到它不是用于此目的,因为它只能操作由增强器生成的 BigDecimal,如下所示:

Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(BigDecimal.class);
enhancer.setCallback(new MethodInterceptor() {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
if(method.getName().equals("toString")){
return ((BigDecimal) obj).toPlainString();
}else{
System.out.println(method.getName() + " called.");
return proxy.invokeSuper(obj, args);
}
}
});
BigDecimal bd = (BigDecimal) enhancer.create(new Class[]{String.class}, new Object[]{"123"});
System.out.println(bd.toString());

我打算看看 Byte Buddy 和 Javassit,但猜想它们的工作方式与 cglib 类似。

有人知道实现这一目标的方法吗?

对于 JSP,我可能会使用自定义的 javax.el.BeanELResolver,但是仍然有办法在整个应用程序中重写标准库方法吗?

最佳答案

您可以扩展该类并覆盖您自己的类中的toString 方法,而不是直接使用BigDecimal。然后您只需替换构造函数调用即可使用您的类。

public class MyBigDecimal extends BigDecimal {
public MyBigDecimal(String val) {
super(val);
}

@Override
public String toString() {
return toPlainString();
}
}

关于java - 如何重写 BigDecimal toString() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56069286/

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