我与Scala的相遇为零。我返回了以下类型的库(kafka(的scala对象:
kafka.coordinator.GroupMetadataManager$$anon$2@2b9ee60f
我试图将其传递给Scala以获取一些有意义的信息。即访问数据成员。
package metricsReporter;
import kafka.coordinator.GroupMetadataManager;
class processMetrics {
def hello() { println("Hello (class)") } // [1]
def printGM(gmObject: AnyRef ) {
println(gmObject)
}
}
我正在从Java称呼上述功能
new processMetrics().printGM(metric);
此功能也正在输出相同的文本。我还获得了其他对象,例如Anon $ 2,Anon $ 3(应该具有有关不同Kafka分区的数据(,相同类型。
您不需要在Scala中进行。您在问题中写的内容等于System.out.prinln(metric)
。另一个答案建议您做的类似:
for (Field field: metric.getClass().getDeclaredFields()) {
field.setAccessible(true);
System.out.println(field.getName() + ": " + field.get(metric));
}
这里没有什么神奇的。
这是另一个问题,这些方法似乎都没有任何意义。您不需要使用反射来访问公共API返回给您的数据。看来肯定应该有一种更好的方法来做您要在这里尝试做的事情...如果我们知道后者的真实是什么...编辑:语法
您看到的只是输出默认toString
实现。
也许您可以使用反射来获取字段值?
def printGM(gmObject: AnyRef ) {
val result = gmObject.getClass().getDeclaredFields().map { field =>
field.setAccessible(true)
s"${field.getName()}:${field.get(gmObject).toString()}"
}.deep.mkString("[", ", ", "]")
println(result)
}