Как переопределить метод BigDecimal toString ()? - PullRequest
0 голосов
/ 10 мая 2019

Я работаю над устаревшим веб-приложением, созданным с использованием JSP. Меня попросили заменить double на BigDecimal в кодах. Мне известно, что метод BigDecimal, используемый по умолчанию для метода toString (), использует научные обозначения для визуализации чисел. Это будет проблемой при выводе числа на странице JSP. Я не хочу заменять каждый $ {obj.property} на . Поэтому мне интересно, есть ли способ переопределить метод toString (), поэтому он будет вызывать toPlainString () ? Я попробовал cglib, но понял, что это не для этой цели, так как он может манипулировать только BigDecimal, сгенерированным Enhancer, как показано ниже:

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, но все же есть ли способ переопределить стандартный метод библиотеки во всем приложении?

...