問題の一部は、そのJavaMetaClassです。 newは、すべての子孫クラスに対して呼び出されるときに、プロキシを作成するために常に呼び出されることを前提としています。 同じ行で、jclass_registryの処理は実際のプロキシに制限する必要があります。 私が見つけた他の何かは、Javaから返されたオブジェクトの処理が緩いため、Javaメソッドにオブジェクトを戻すことができないということです。
私はこの問題のいくつかにやがて取り組むことができます。
jniusがJavaをロードする速度と、最新バージョンのPythonを使用できることが非常に気に入っています。
この問題を支持したいですか? それに賞金を投稿してください! Bountysourceを介して報奨金を受け取ります。
遅れて申し訳ありませんが、これらの問題のそれぞれについて、より具体的な(テストケース?)説明を提供できますか? Pythonから(プロキシを使用して)Javaクラスを継承できるようにするための作業を開始しましたが、完全ではありません。ただし、ここで指摘する問題は、それと大まかに関連しているようであり、おそらくいくつかの異なる問題に分割する必要があります。
議論に参加して申し訳ありませんが、Javaクラスを継承することは、 @ Apalalaに必要なものではない可能性があります。このクラスで行われるように、JavaクラスをPythonクラスでラップすることをお勧めします。 すべての自動クラスはjava.pyで実行されるため、リンクされたコードではわかりにくい場合がありますが、コードは次のようになります。
class MyJavaWrapperClass(AnyPythonClassOrMixin):
def __init__(self, *args, **kwargs):
JavaClass = autoclass('org.uber.cool.JavaClass`)
self._my_java_object = JavaClass(*args, **kwargs) # use double underscore to "hide" the Java object
Javaクラスを継承しない理由は次のとおりです。
class Element
、 class Node
、 class Relationship
のメソッドを見てください。ほとんどの場合、APIをよりPythonicにするためであっても、ほとんどすべてに定型コードがあります;)パフォーマンスの観点からは、影響はないと思いますが、 @ tshirtmanの方がよく知っているかもしれません。
もう1つ、Javaオブジェクトのラップは、現在、非常にうまく機能しています:-)
今のところ、Pythonコードを使用してJavaメソッドをオーバーライドすることは可能ですか?
Javaクラスの継承はどうですか?
私はこれを調べるのにかなりの時間を費やしました、そして私はそれを行うための実用的な方法はなく、実行時にJavaバイトコードを生成する以外にそれを行うためのライブラリがあるという結論に達しました、しかしそれは追加するように感じましたライブラリに多くの複雑さがあり、おそらく範囲外です。 締めくくりについてはよくわかりませんが、うまくいくとは思わないので、wontfixとしてマークするのは不合理ではありません。
@ monami7001何か進歩はありますか?
それは約4年前のことであり、私の知る限り、実行時にJavaバイトコードを生成することは依然として唯一の選択肢のように見えます(おそらく私ほど悪くはないので、それを調べる必要があります)。
1つの回避策は次のとおりです。
自動クラスで使用するには