Java重写多成员变量的toString

Java重写多成员变量的toString,java,tostring,Java,Tostring,我有以下课程 public class Foo { private long var1; private float var2; private double var3; /* getter and setter */ } 要将数值打印到命令行,我使用String.valueOf(obj.getVar2()),但这将导致9.888。 有没有办法为所有数字getter(float、double)生成格式化输出? 我有一个函数“bar”,它将给定的数值格式化为字符

我有以下课程

public class Foo {
   private long var1;
   private float var2;
   private double var3;
   /* getter and setter

    */
}
要将数值打印到命令行,我使用String.valueOf(obj.getVar2()),但这将导致9.888。 有没有办法为所有数字getter(float、double)生成格式化输出? 我有一个函数“bar”,它将给定的数值格式化为字符串。现在,我想调用obj.getVar2().toString()之类的函数,以从“bar”获取格式化字符串形式的数值。
有可能吗?

如果bar是非静态方法-
obj.bar(obj.getVar2())
如果bar是静态方法-
Foo.bar(obj.getVar2())


顺便说一下,您的类定义是错误的。它应该是
公共类Foo{
而不是
公共类Foo(){

您可以向Foo类添加方法:

public String getVar1AsString() {
    return Utils.bar(var1);
}
但是您不能将
Float.toString()
Double.toString()
的语义更改为在内部使用
bar


另一种选择是提供您自己的
CustomFloat
CustomDouble
类,并在应用程序中的任何地方使用它们。

有许多方法可以获得格式化的数字:

class Foo {
    private long var1;
    private float var2;
    private double var3;

    public double getVar3() { return var3; }
    public float getVar2() { return var2; }
    public long getVar1() { return var1; }

    public String getFormatVar3() {
        // third way
        return String.format("%XXX", var3);
        // or
        return this.bar(var3);
    }
    @Override
    public String toString() {
        // first way
        return String.format("%XXX %XXX %XXX", var1, var2, var3);
    }

    public static void main(String[] args) {
        // second way
        Foo foo = new Foo();
        String format = String.format("%XXX", foo.getVar1());
    }

    private String bar(Number n) {
        // discover type of number
        return String.format("%XXX", n);
    }
}

其中,
%XXX
是您的格式。

“现在,我想调用像
obj.getVar2().toString()这样的函数,从
中获取格式化字符串形式的数值。是否可能?”您在尝试时是否遇到任何错误?是的,有很多方法,这是可能的。参考我认为您应该启动一个float/double对象,而不是getter()中的原始对象,从那里您可以执行obj.getVar2().toString()。@MadhanThat函数。谢谢;)@Ramin-Omrani可能,但是Long.toString()不支持我的格式化字符串。我也有这个想法,但我不想让X个字符串getter用于X个数值。好的,我可以将格式化函数放在类中并调用FormattedString(getVar1())……我更喜欢使用简单的前缀(如toString())来获取字符串值。我理解,但Java不支持“扩展方法”,在目标C中也称为“类别”。谢谢,这是我想知道的。这是我的第一个解决方案。正如BladeCoder所说,“类别”在Java中不可用,因此您的解决方案在我的情况下效果最好。