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中不可用,因此您的解决方案在我的情况下效果最好。