2

Tree クラスに GWT のバグが見つかりました (Google によって修正されましたが、新しいリリースで修正されました)。修正が必要な機能はプライベート機能です。プライベート関数をオーバーライドする方法があるかどうか疑問に思っています。必要に応じてハッキーになる可能性がありますが、方法があれば教えてください。

GWT コードを変更して別のオプションとして再コンパイルする方法を見つけようとすることもできますが、クラス (「MyTree」) を派生させてこの機能を何らかの方法でオーバーライドできれば、はるかに簡単になります。

4

6 に答える 6

5

プライベート関数はオーバーライドできません。基本的に、サブタイプには存在しないようです。

また、サブクラスのオーバーライドにディスパッチするスーパークラスの意味でオーバーライドすることもできません。

具体的な例が役に立つかもしれません:

public class Test
{

    public static void main(String[] args)
    {
        (new B()).privateGo();
        (new B()).protectedGo();
        (new C()).privateGo();
    }

}


class A
{
    public void privateGo()
    {
        _privateGo();
    }

    public void protectedGo()
    {
        _protectedGo();
    }

    private void _privateGo()
    {
        System.out.println("A._privateGo");
    }

    protected void _protectedGo()
    {
        System.out.println("A._protectedGo");
    }

}

class B extends A
{

    private void _privateGo()
    {
        System.out.println("B._privateGo");
    }

    protected void _protectedGo()
    {
        System.out.println("B._protectedGo");
    }

}

class C extends A
{
    public void privateGo()
    {
        _privateGo();
    }
    private void _privateGo()
    {
        System.out.println("C._privateGo");
    }
}

出力は次のようになります。

A._privateGo
B._protectedGo
C._privateGo

保護されたメソッドは、サブクラスの実装にディスパッチされます。プライベート メソッドはそうではありません。この意味では、サブタイプにプライベート メソッドが存在しないようなものです。

GWT の修正済みバージョンに更新するか、ソースを編集する必要があります。C の privateGo が C の _privateGo にディスパッチする方法に注意してください。これはハックな回避策として使用できますが、問題は、スーパークラスがまだ C._privateGo (you'ソースを編集するか、新しいバージョンを取得する方がはるかに優れています)。

于 2012-11-08T04:46:38.143 に答える
2

これがあなたを完全におもちゃにするのに役立つかどうかわからない

プライベートメソッドの場合、そのプライベートメソッドを呼び出しているパブリックメソッドが存在する可能性があります。クラスでそのパブリックメソッドをオーバーライドしてみてください。

于 2012-11-08T04:50:19.243 に答える
1

ハッキング方法は次のとおりです。

プライベート メソッドは、クラス内の一部のパブリック メソッドで使用するためのものです。クラスを拡張し、そのパブリック メソッドをオーバーライドします。すべてをそのままにして、オーバーライドされたメソッドから独自のプライベート メソッドを呼び出します。

于 2012-11-08T04:54:17.107 に答える
0

プライベートメソッドは継承されず、オーバーライドすることはできません。次のスレッドはあなたを助けるかもしれません...

1。Javaでプライベートメソッドをオーバーライドする

2。紛らわしい「プライベートメソッドをオーバーライドする」

3。Javaでプライベートメソッドをオーバーライドできますか?

于 2012-11-08T04:51:03.733 に答える
0

GWT クラスのソースはバンドルに付属しています。ソースを編集して問題を修正してみませんか?

于 2012-11-08T04:53:21.640 に答える
0

-覚えておくべき最も重要なことの 1 つはprivate methodsそれらは継承されないということです。

-Sub-Classしたがって、 aは内の の存在について完全に盲目であると言えます。したがって、Overridden できないことは明らかです。Private memberSuper-Class

于 2012-11-08T05:35:17.030 に答える