2011-10-03 9 views
4

Pythonクラスは本当にプライベートメンバーを持つことはできません。 として - これが明らかに意味するのは、Javaクラスの秘密鍵がJythonに公開されるということです。JythonのJavaクラスを使用する場合は、getterとsetterを使用するのは気にかかりますか?あなたはすべきですか?

したがって、Jythonを使用して、ゲッターとセッターを介して他のJavaクラスに公開されるJavaクラスの秘密にアクセスする場合、これらのメソッドを使用するのは気にかかりますか?それとも、秘書に直接アクセスするだけですか?

より適切な質問はでしょうか?ゲッターとセッターを使用しますか?メソッドの副作用がある場合、答えは間違いなく「はい」になりますが、誰かがどこにいてもゲッターとセッターが正しいことを考えているので、メソッドがただそこにある場合(IMOそうではありません。悪いことを公にする)、Javaの余分な儀式のすべてを気にする何らかの理由がありますか?

答えて

5

Jythonは非公開のJavaメンバーにどこからでもアクセスできるようにすることができますが、this is a feature that must be enabled explicitlyです。これだけで、私はJavaクラスの可視性を尊重するのに十分な理由です。そうでないと、が私のマシンで動作する可能性があります。問題。

主に、あなたのコントロール下にないクラスに対して、提供されているプロパティアクセサを使用する必要があります。次のような理由がない限り、次のようにする必要はありません。クラスの将来のバージョンでは、彼らのゲッター/セッター。

Jythonには、hiding the accessor methods of JavaBean propertiesという素晴らしい機能があります。 Jythonはx.foo += 5x.setFoo(x.getFoo() + 5に変換します。通常、プロパティのバッキングフィールドはプロパティ自体と同じ名前なので、そうでない場合でも「Jythonはバッキングフィールドをアクセス可能にします」とこの機能を混同している可能性があります。私はJythonのこのプロパティにアクセスするようなフィールドの構文を使用することにします。これは、コードをより簡潔で読みやすくします。

+0

環境によって異なります。 [デフォルトではPydevはJavaのアクセシビリティを考慮していません](http://www.mail-archive.com/[email protected]/msg03681.html)、特別なデバッグ情報を得るためです。 Javaのバックグラウンドから来ているわけではありません。また、Jythonサブクラスが親クラスの保護されたフィールドにアクセスする必要がある場合に有効にする機能です。 –

+0

しかし、私のコントロール下にないクラスのアクセサーを使用するのは正しいでしょう。アクセサーを隠すことについてのヒントについては、私はそれを知らなかった: –

+0

最後の1点:JythonのSwingを使用する正気な人は、確かにSwingクラスのアクセシビリティに違反しているはずである: 'btn = JButton "Foo"、actionPerformed = Bar) 'は、Barが関数である場合、' btn = JButton( "Foo")よりもはるかに簡潔で非凡です。 btn.addActionListener(bar) '、barはActionListenerインタフェースを実装するクラスのオブジェクトです。 –

関連する問題