Java覆盖多个成员变量的toString

时间:2015-07-08 16:46:04

标签: java tostring

我有以下课程

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

    */
}

要将数值打印到命令行,我使用String.valueOf(obj.getVar2()),但这将导致9.888888888。 有没有办法为所有数字getter生成格式化输出(float,double)? 我有一个功能' bar' ,它会将给定的数值格式化为字符串。现在,我想调用像obj.getVar2()。toString()这样的函数,将数值作为格式化字符串从' bar'中恢复。 有可能吗?

3 个答案:

答案 0 :(得分:1)

您可以为Foo类添加方法:

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

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

另一种方法是提供您自己的CustomFloatCustomDouble课程,并在您的应用中随处使用。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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