【问题标题】:how is scala type casting done in py4j?scala 类型转换如何在 py4j 中完成?
【发布时间】:2014-11-26 06:31:18
【问题描述】:

当使用 py4j 触发 jvm 时,有没有办法像 scala/java 那样进行类型转换?

基本上,我想翻译一下:

someOtherTypeInstance.asInstanceOf[RDD[Any]]

变成这样的:

someOtherTypeInstance = gateway.jvm.getSomeOtherTypeInstance()
someOtherTypeInstance.asInstanceOf(gateway.jvm.RDD[Any]) // don't know how to deal with generics

【问题讨论】:

    标签: java scala casting py4j


    【解决方案1】:

    Py4J 通常不需要类型转换,因为它大量使用反射。

    如果你在一个对象上调用一个方法,Py4J 将使用 JVM 反射工具在对象的类层次结构中找到这个方法,无论对象的广告类型是什么。同样,当您将对象传递给方法时,Py4J 将尝试通过检查类层次结构和对象的实现接口来找到最接近的方法签名。

    例如,这段代码在 Py4J 中完全有效:

    // Java code
    public class TestTypes {
        public void method1(Foo param1) {}
    
        public Object getObject() { new Foo() }
    }
    
    // Python code
    myJavaObject = java_gateway.jvm.TestTypes()
    obj = myJavaObject.getObject()
    // no need for type casting
    myJavaObject.method1(obj)
    

    如果你需要其他场景的类型转换(我对 Scala 不太了解),你应该填写feature request

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2016-08-11
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2020-06-16
      相关资源
      最近更新 更多