gpt4 book ai didi

java - 什么是等同于 Ruby Object#inspect 的 Java 函数

转载 作者:数据小太阳 更新时间:2023-10-29 07:49:50 26 4
gpt4 key购买 nike

在 Ruby 中,我可以使用以下代码获取实例变量 val

class C
def initialize(*args, &blk)
@iv = "iv"
@iv2 = "iv2"
end
end

puts "C.new.inspect:#{C.new.inspect} ---- #{::File.basename __FILE__}:#{__LINE__}"
# => C.new.inspect:#<C:0x4bbfb90a @iv="iv", @iv2="iv2"> ---- ex.rb:8

在Java中,我希望得到如下结果,我该怎么办?

package ro.ex;

public class Ex {
String attr;
String attr2;

public Ex() {
this.attr = "attr";
this.attr2 = "attr2";
}

public static void main(String[] args) {
new Ex().inspect();
// => Ex attr= "attr", attr2 = "attr2";
}
}

更新:

我发现 this可以解决我的问题,但我想更简单一些,比如 guava.in ruby​​ 中的一些函数,我主要在 ruby​​mine watch 工具窗口中使用 Object#inspect,我希望我可以像 obj.inspect 一样使用它

更新:

我最终确定使用 Tedy Kanjirathinkal 答案并使用以下代码自行实现:

package ro.ex;

import com.google.common.base.Functions;
import com.google.common.collect.Iterables;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Map;

/**
* Created by roroco on 10/23/14.
*/
public class Ex {
String attr;
String attr2;

public Ex() {
this.attr = "val";
this.attr2 = "val2";
}

public String inspect() {
Field[] fs = getClass().getDeclaredFields();
String r = getClass().getName();
for (Field f : fs) {
f.setAccessible(true);
String val = null;
try {
r = r + " " + f.getName() + "=" + f.get(this).toString();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return r;
}

public static void main(String[] args) {
StackTraceElement traces = new Exception().getStackTrace()[0];
System.out.println(new Ex().inspect());
// => ro.ex.Ex attr=val attr2=val2
}
}

最佳答案

我猜你想要的是ReflectionToStringBuilderApache Commons Lang图书馆。

在你的类中,如下定义你的 inspect() 方法,你应该能够看到预期的结果:

public void inspect() {
System.out.println(ReflectionToStringBuilder.toString(this));
}

关于java - 什么是等同于 Ruby Object#inspect 的 Java 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26531408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com