.inspect java_什么是Java函数等同于Ruby Object#inspect

在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:#<0x4bbfb90a> ---- ex.rb:80x4bbfb90a>

在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​​中的一些功能,我主要在rubymine监视工具窗口中使用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

}

}

解决方法:

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

public void inspect() {

System.out.println(ReflectionToStringBuilder.toString(this));

}

标签:java,ruby

来源: https://codeday.me/bug/20190824/1713142.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值