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.