Java 为多个成员变量覆盖 toString

Java Override toString for multiple member variables

我有以下class

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

    */
}

为了将数值打印到命令行,我使用了 String.valueOf(obj.getVar2()),但这将导致 9.888888888。 有什么方法可以为所有数字获取器(float、double)生成格式化输出吗? 我有一个函数 'bar' ,它将给定的数值格式化为字符串。现在,我想调用 obj.getVar2().toString() 之类的函数,以从 'bar' 获取格式化字符串形式的数值。 可能吗?

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

顺便说一下,您的 class 定义是错误的。应该是 public class Foo { 而不是 public class Foo() {

您可以向 Foo 添加方法 class:

public String getVar1AsString() {
    return Utils.bar(var1);
}

但是您不能更改 Float.toString()Double.toString() 的语义以在内部使用 bar

另一种方法是提供您自己的 CustomFloatCustomDouble classes 并在您的应用程序的任何地方使用它们。

获取格式化数字的方法有很多:

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 是您的格式。