2012-04-12 9 views
2

UserCourse und NewReleases sind unterschiedliche Klassen mit derselben Methode. aber unterschiedliche Ausgabe.Dynamisches Objekt aus zwei Klassen in Java

final Object userCourses; 

    if(mFlag == 11){ 
      try{ 
       userCourses = new UserCourses(params[0]); 
      }catch(Exception e){ 
       Log.i(TAG, "Exception: " + e.getMessage()); 
      } 

     } 
     else if(mFlag == 44){ 
      try{ 
       userCourses = new NewReleases(); 
      }catch(Exception e){ 
       Log.i(TAG, "Exception: " + e.getMessage()); 
      } 
     } 

Nun, wenn ich

userCourses.getUserCourses().get(i); 

nenne ich Fehler "cast userCourses hinzufügen" erhalten. Beide Klassen haben diese Methode.

Ist es möglich, dies zu tun oder nicht? Wenn ja, bitte sag mir wie.

Antwort

2

Wie würden Sie erwarten, dass dies funktioniert, useCourses ist vom Basistyp Object - die diese Methode nicht hat.

Erfahren Sie mehr über Interfaces und wie Sie sie verwenden.

+0

Hey danke. Ich habe Interfaces erstellt, weiß aber nicht, dass es auch verwendet wird. Ich werde sie lernen und benutzen. – SkyWalker

0

Sie sollten auf das tatsächliche Objekt, das die Methode hat, verweisen.

Beispiel:

((UserCourses)userCourses).getUserCourses().get(i); oder

((NewReleases)userCourses).getUserCourses().get(i);

Object ist ein generischer geordneter Typ, die alle Objekte abgeleitet sind.

Aus diesem Grund können Sie new UserCourses und NewReleasesObject zuweisen.

Aber dann müssten Sie auf das spezifische Objekt heruntergestuft werden, um die aktuelle Methode aufrufen zu können.

Dieser Ansatz ist jedoch schlechte Programmierung, da es nicht typsicher ist. Aber dieser Codeschnipsel kann mit dieser Änderung arbeiten.

Zum Refactoring des Codes sollten Sie einen anderen Ansatz verfolgen. Lies über Schnittstellen als @Nim Antwort

+0

Okay, ich werde mit Interfaces tun. – SkyWalker

Verwandte Themen