как выполняется приведение типов в стиле scala в py4j?

1

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

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

someOtherTypeInstance.asInstanceOf[RDD[Any]]

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

someOtherTypeInstance = gateway.jvm.getSomeOtherTypeInstance()
someOtherTypeInstance.asInstanceOf(gateway.jvm.RDD[Any]) // don't know how to deal with generics
Теги:
casting
py4j

1 ответ

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), вы должны заполнить запрос функции.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню