我正在一个Java项目上工作,我有两个类(针对该主题,不在项目中):仅在Cle中使用方法“ getNumero()”的类“ Objet”和类“ Cle extended Objet”。我主要编写了以下代码:

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”的第二部分中,Objet类没有方法“ getNumero()”,因此我检查Objet是否为Cle,但是java不理解,如果我的第一部分“如果”为true,则第二部分是可能的。有人可以说是否有可能从objets中提取Cle,怎么做?

谢谢。

最佳答案

使用显式强制转换,常见的成语是:

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


进一步查看并根据具体情况,可以将getNumero()作为抽象方法添加到Objet,而不是强制转换。如果您不能这样做,也许您可​​以研究Generics,以使您的Objet实例供应商能够提供Cle实例。这又取决于具体情况。

09-30 09:34