2014-11-26 1 views
1

Есть ли способ сделать литье типа, как это делается, это scala/java при использовании py4j для запуска jvm?как сканирование типа scala сделано в py4j?

В принципе, я хотел бы перевести это:

someOtherTypeInstance.asInstanceOf[RDD[Any]] 

В чем-то вроде:

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

ответ

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.