0
public void setParent(Window parent) {
    if (true) {
        this.parent = ((abc.InvestRegPropertySeize) parent);
    } else {
        this.parent = ((cde.InvestRegPropertySeize) parent);
    }
}

上記のコードをコンパイルすると、正常にコンパイルされ、コンパイル後に「cde.InvestRegPropertySeize」のクラス ファイルを手動で削除しました。このコードを実行しようとすると、次のエラーが発生します。

NoDefClassFoundError of'cde.InvestRegPropertySeize'

しかし、条件が常に真であり、実行時に「cde.InvestRegPropertySeize」クラス ファイルが必要ないため、これは発生しないと思います。なぜそれが発生するのか、解決策を教えてください。

4

1 に答える 1

0

このようなことを行う唯一の方法は、リフレクションを使用することです。コード内の 2 つのキャストを削除して、クラスが実行時に解決されないようにします。次に、リフレクションを使用してフィールドにアクセスし、メソッドを呼び出します。リフレクションは強力ですが、コードはあまり読みにくく、パフォーマンスのオーバーヘッドが伴います。そのため、使用する前によく考えてください。

于 2012-07-12T07:02:05.103 に答える