2012-04-12 23 views
2

UserCourse和NewReleases是使用相同方法的不同類。但輸出不同。來自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()); 
      } 
     } 

現在,當我打電話

userCourses.getUserCourses().get(i); 

我得到 「添加投地userCourses」 的錯誤。 這兩個類都有這種方法。

是否可以做到這一點?如果是,請告訴我如何。

回答

2

您會如何預期這項工作,useCourses是基本類型Object - 它沒有這種方法。

瞭解有關Interfaces以及如何使用它們。

+0

嘿謝謝。我創建了接口,但不知道它也被使用。我會學習和使用它們。 – SkyWalker 2012-04-12 07:08:30

0

您應該轉換爲具有該方法的實際對象。

實施例:

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

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

Object是,所有對象都源自一個通用的超類型。

這就是爲什麼您可以將new UserCoursesNewReleases分配到Object

但是,那麼你將不得不倒下到特定的對象才能夠調用實際的方法。

雖然這種方法不好,但它不是類型安全的。 但是這段代碼可以適應這種變化。

爲了重構代碼,你應該遵循另一種方法。閱讀關於接口作爲@Nim回答

+0

好吧我會用Interfaces做。 – SkyWalker 2012-04-12 07:06:49