0

私はJavaプロジェクトに取り組んでおり、2つのクラスがあります(このトピックでは、プロジェクトではありません):クラス「Objet」とクラス「Cle extends Objet」で、Cleでのみメソッド「getNumero()」を使用します。私のメインでは、このコードを書きました:

Objet[] objets = Scenario.objets;
for (int i=0;i<objets.length;i++)
{
    if(objets[i].getClass() == modele.Cle.class 
    && objets[i].getNumero() == salle.getPorte(direction).getNumero()){}
}

問題は「if」の 2 番目の部分にあります。クラス Objet にはメソッド「getNumero()」がないため、Objet が Cle であるかどうかを確認しますが、java は、最初の部分が「if」が true の場合、2 番目の部分が可能です。オブジェクトから Cle を抽出できるかどうか、またその方法を教えてください。

ありがとうございました。

4

1 に答える 1

3

明示的なキャストを使用します。一般的なイディオムは次のとおりです。

if (objets[i] instanceof Cle) {
   Cle aCle = (Cle) objets[i];
   aCle.getNumero(); // works
} else {
   ... // fail?
}

さらに見て、具体的な状況に応じて、キャストの代わりにgetNumero()抽象メソッドとして に追加できます。Objetそれができない場合は、ジェネリックを調べて、インスタンスのサプライヤーがObjetインスタンスを提供できるようにすることができCleます。これも具体的なシナリオに依存します。

于 2012-12-07T23:54:37.160 に答える