class bouncingBall():
def __init__(self, bounce, window, position):
self.bounce = bounce
self.window = window
self.position = position
ball = bouncingBall(0.35, 1.5, 0.75)
print(ball) # <__main__.bouncingBall object at 0x0000025980427D60>
print(ball.__dict__) # {'bounce': 0.35, 'window': 1.5, 'position': 0.75}
在python中,我们可以通过使用< code >对象来检查实例的内部。__dict__
我们如何在. java
或. pde
中实现这一点?
您可以在 Ball 类中重写 toString
并自行打印实例数据。
或者,您可以使用反射获取类实例变量并使用反射打印它们的值,以获取所有字段数据并打印它
正如Saksham(1)指出的那样,一个选项是重写toString()
:这是手动的,但没有反射的开销。
您也可以使用java.lang.reflect.*;您可以将其用于超类中的实用函数,然后您的所有子类都将继承此特征(无需为每个子类手动覆盖toString()
),但是您将花费一些CPU时间进行反思。
下面是一个非常粗略的示例,演示了这两种情况:
// option 2: reflect
import java.lang.reflect.*;
class BouncingBall{
float bounce;
float window;
float position;
BouncingBall(float bounce, float window, float position){
this.bounce = bounce;
this.window = window;
this.position = position;
}
// option 1: override toString() (manual)
String toString(){
return String.format("[BouncingBall bounce=%.2f window=%.2f position=%.2f]",
bounce, window, position);
}
}
void setup(){
BouncingBall ball = new BouncingBall(0.35, 1.5, 0.75);
println("ball properties and values via toString()");
println(ball);
println();
println("ball properties and values via reflection");
// reflect instance fields
try{
for(Field field : BouncingBall.class.getDeclaredFields()){
println(field.getName(), field.get(ball));
}
}catch(IllegalAccessException e){
e.printStackTrace();
}
}
更新在Python中,很高兴得到一个<code>dict</code>,您可以进一步使用它。在Java中,理论上可以返回<code>HashMap</code>(或类似的Map结构),但只能关联相同类型的键。在这种情况下,由于所有属性都是可以工作的float,但是您可能会遇到属性为布尔值、浮点值、int值等的情况。解决方法是使用JSONObject:此选项的一个很好的副作用是,您可以通过saveJSONObject()
轻松地将数据序列化/保存到磁盘:
import java.lang.reflect.Field;
class BouncingBall{
float bounce;
float window;
float position;
BouncingBall(float bounce, float window, float position){
this.bounce = bounce;
this.window = window;
this.position = position;
}
// option 1: override toString() (manual)
String toString(){
return String.format("{\"bounce\":%.2f, \"window\":%.2f, \"position\":%.2f}",
bounce, window, position);
}
// option 2: reflect
JSONObject toJSON(){
JSONObject result = new JSONObject();
try{
for(Field field : BouncingBall.class.getDeclaredFields()){
// handle floats for demo purposes
if(field.getType() == float.class){
result.setFloat(field.getName(), (float)field.get(this));
}
}
}catch(IllegalAccessException e){
e.printStackTrace();
}
return result;
}
}
void setup(){
BouncingBall ball = new BouncingBall(0.35, 1.5, 0.75);
println("ball properties and values via toString()");
println(ball);
println();
println("ball properties and values via reflection");
println(ball.toJSON());
// save JSON data
saveJSONObject(ball.toJSON(), "ball.json");
}
(请注意格式化toString()的手动选项,因此数据是有效的JSON也可以工作(可以通过SaveStrings()
保存到磁盘)
同样,如果需要,您可以使用反射将加载的JSON数据映射到实例属性。
我正在使用jdk 11和虚拟主机样式访问(AWS SDK for Java version 2)在AWS s3 bucket中创建/访问对象,如下所示: 虽然我能够在指定的bucket中创建对象,但我无法打印bucket中的内容/对象列表,尽管在我检查权限时,每个人都有权查看bucket中的对象。错误消息为: 这是s3client的创建方式: 这就是我打印列表的方式: BUCKET\u NAME是
我正在尝试将集合的内容打印到Spark控制台。 我有一个类型: 我使用命令: 但这是打印的: res1:组织。阿帕奇。火花rdd。RDD[单位]=MappedRDD[4]位于map at:19 如何将RDD写入控制台或保存到磁盘,以便查看其内容?
运行:
问题内容: 我想读取捕获的异常的完整堆栈跟踪。 例如: 我想阅读“ … 23更多”,以了解异常的来源。 问题答案: 答案很简单,这些行已经在stacktrace中了:) 基本上,以下情况正在发生:
我希望在下面的代码中输出一个文本而不是: ie我希望输出为
我应该如何将它打印到我的控制台,并使它显示我在方法中声明的数组? 当我试图打印它时,就像: 不管用,那我该怎么做呢? 我只是想知道如何在我的控制台打印它。