Java中的Scala对象



我与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)
}

相关内容

  • 没有找到相关文章

最新更新