2016-07-12 141 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中,还有另外的原则,应该遵循。这不是要求,而是礼貌的表现。 –