是否有一个库将以递归方式转储/打印对象属性?我正在寻找类似于Firebug中的console.dir()函数的东西.
我知道commons-lang ReflectionToStringBuilder但它没有递归到一个对象.即,如果我运行以下内容:
public class ToString {
public static void main(String [] args) {
System.out.println(ReflectionToStringBuilder.toString(new Outer(), ToStringStyle.MULTI_LINE_STYLE));
}
private static class Outer {
private int intValue = 5;
private Inner innerValue = new Inner();
}
private static class Inner {
private String stringValue = "foo";
}
}
Run Code Online (Sandbox Code Playgroud)
我收到:
ToString $ Outer @ 1b67f74 [intValue = 5
innerValue = ToString $ Inner @ 530daa]
我意识到在我的例子中,我可以覆盖Inner的toString()方法,但在现实世界中,我正在处理我无法修改的外部对象.
toString某些简单类的自动生成方法是好还是坏?
我正在考虑生成类似下面的内容,它采用变量名称并生成一个toString方法,打印名称后跟其值.
private String name;
private int age;
private double height;
public String toString(){
return String.format("Name: %s Age: %d Height %f", name, age, height);
}
Run Code Online (Sandbox Code Playgroud) public class MyClass {
ClassABC abc = new ClassABC();
}
Run Code Online (Sandbox Code Playgroud)
我只有一个ClassABC的.class文件.我想打印"abc"对象的所有public,private,protected和default字段值.我怎么能用Reflection做到这一点?
我有一个方法,想要检查其中的变量而无需调试 - 在Java中是否可能?
我不想写大量的代码,如:
System.out.println("a: " + a);
Run Code Online (Sandbox Code Playgroud)
我想要像:
System.out.printLocals();
Run Code Online (Sandbox Code Playgroud)
有这样的东西也应该很棒:
System.out.printMembersOf(someObjectInstance);
Run Code Online (Sandbox Code Playgroud) 我怎样才能覆盖System.out.println()?
就像我会覆盖一样toString();
@Override
public String toString() {
return "x";
}
Run Code Online (Sandbox Code Playgroud)
我想让它当你打电话时
System.out.println(OBJECT);
Run Code Online (Sandbox Code Playgroud)
它将打印对象的属性而不是引用。
我有一个scala特征,其公共UUID具有默认值:
trait pet {
var uuid_ : UUID = UUID.randomUUID
}
Run Code Online (Sandbox Code Playgroud)
现在我在scala中创建了多个类:
class dog extends pet {
var foo = 1
}
class cat extends pet {
}
class fish extends pet {
}
Run Code Online (Sandbox Code Playgroud)
之后我在Java中创建了一个方法(两个语言混合的旧项目).
这里剪了我的问题.在变量somePet是一个实例dog,cat或fish.但目前尚不清楚它们究竟是什么:
// printing all variables in the console for human testing
Serializer.printAllFields(somePet);
// The somePet Variable must be a pet
if(!pet.class.isAssignableFrom(somePet.getClass()))
throw new Exception("Not a pet.");
// get the UUID of the pet
UUID uuid_;
try { …Run Code Online (Sandbox Code Playgroud)