2016-07-12 139 views
0

我使用RxJava在Android上做一些東西,靜態泛型方法的類 - Java的

我總是在觀察到同樣的東西用它像這樣前:

Observable<AnyObject> observable = getSomeObservable(); 
// The next 2 lines are the lines that i always add them to any Observable 
observable.observeOn(AndroidSchedulers.mainThread()) 
       .subscribeOn(Schedulers.computation()); 

因此,可觀測是通用的,可以是任何對象,如果我想這兩行添加它,在統計的方法返回它,我需要做的方法也通用

我試圖做的是要通過觀察的參數,添加設置並返回,如下所示:

public class UtilsObservable<T> { 

    public static Observable<T> setupObservable(Observable<T> observable) { 
     return observable.observeOn(AndroidSchedulers.mainThread()) 
       .subscribeOn(Schedulers.computation()); 
} 

我得到一個編譯錯誤在這裏說:

UtilsObservable.this cannot be referenced from a static context 

pic

我的問題是:

所以可以在這無論如何都做了什麼?通用方法需要通用對象修改它並返回相同的類型?

+0

你在哪裏定義T的界限? –

+0

@blahfunk它是通用符號 – MBH

回答

5

的問題是,因爲泛型類型T鏈接到UtilsObservable類的具體實例,但在靜態環境下,你沒有一個實例引用。您需要使該方法具有通用性,與類的泛型類型無關。

public class UtilsObservable<T> { 

    public static <T> Observable<T> setupObservable(Observable<T> observable) { 
     return observable.observeOn(AndroidSchedulers.mainThread()) 
      .subscribeOn(Schedulers.computation()); 
} 

通知方法類型之前的附加<T>。這使得方法本身成爲一個泛型類型,它不再與類的一個實例相連接。

2

首先請don't break the chain

所有和第二遵循resueman答案:

public static <T> Observable<T> setupObservable(Observable<T> observable) { 
    return observable.observeOn(AndroidSchedulers.mainThread()) 
     .subscribeOn(Schedulers.computation()); 
+0

謝謝你的鏈接,這很好,但我認爲這是誇大其詞,因爲它說'醜陋,令人困惑,不再是一系列運營商,難以遵循'!根據什麼是醜陋和混亂?在Android上,我們幾乎總是應用相同的時間表,爲什麼不保存一些行和時間!? – MBH

+1

@MBH OOP中應遵循一些原則。有關於這些的文章和書籍。如在Rx的OOP中,還有另外的原則,應該遵循。這不是要求,而是禮貌的表現。 –