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
。
另一种方法是提供您自己的 CustomFloat
或 CustomDouble
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
是您的格式。
我有以下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
。
另一种方法是提供您自己的 CustomFloat
或 CustomDouble
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
是您的格式。