2016-07-12 3 views
0

私は、いくつかのものを行うためのAndroid上で静的ジェネリックメソッド - Javaの

をRxJavaを使用しています私はいつもこのようにそれを使用する前に、観察に同じものを実行します。

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()); 

したがって観察可能私はそれらの2つの行を追加し、Statisメソッドでそれを返す場合は、私はまた、メソッドを作成する必要があります汎用性があり、任意のオブジェクトにすることができます一般

私はしようとしていたパラメータを追加して、次のように返します。

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

そして、すべての目はresueman答えに従ってください? –

+0

@blahfunkそれは一般的なシンボルです – MBH

答えて

5

generic型TUtilsObservableクラスの特定のインスタンスにリンクされていますが、静的コンテキストでは参照するインスタンスがないため問題です。クラスのジェネリック型とは無関係に、メソッドをジェネリックにする必要があります。

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をお願いします。あなたはTの境界を定義します

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

リンクをありがとう、それは素晴らしかったですが、私はそれは '醜い、紛らわしい、もはや一連の演算子とフォローしていない'と言うように誇張していると思う!それは醜いと混乱していることによると?アンドロイドでは、ほとんど常に同じスケジュールを適用していますが、いくつかの行と時間を節約してみませんか? – MBH

+1

@MBH OOPにはいくつかの原則があります。それに関する記事や本があります。 rxのOOPのように、従うべき別の原則があります。それは要件ではなく、良いマナーの兆候です。 –