Skip to content

Observable.defer and Java 8 type-inference #1157

@benjchristensen

Description

@benjchristensen

I'm having issues with Observable.defer and Java 8 and am not sure if there's anything we can do about it.

package io.reactivex.lab.edge;

import rx.Observable;

public class TestDefer {

    public static void main(String[] args) {
        Observable.defer(() -> {
           return Observable.from(1); 
        }).toBlockingObservable().single();
    }

}

When trying to run this from Eclipse I get this:

Exception in thread "main" java.lang.BootstrapMethodError: call site initialization exception
    at java.lang.invoke.CallSite.makeSite(CallSite.java:328)
    at java.lang.invoke.MethodHandleNatives.linkCallSite(MethodHandleNatives.java:296)
    at io.reactivex.lab.edge.TestDefer.main(TestDefer.java:8)
Caused by: java.lang.ClassFormatError: Duplicate method name&signature in class file io/reactivex/lab/edge/TestDefer$$Lambda$1
    at sun.misc.Unsafe.defineAnonymousClass(Native Method)
    at java.lang.invoke.InnerClassLambdaMetafactory.spinInnerClass(InnerClassLambdaMetafactory.java:324)
    at java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite(InnerClassLambdaMetafactory.java:194)
    at java.lang.invoke.LambdaMetafactory.altMetafactory(LambdaMetafactory.java:473)
    at java.lang.invoke.CallSite.makeSite(CallSite.java:301)
    ... 2 more

and trying to compile with JDK I get:

TestDefer.java:8: error: method defer in class Observable<T#2> cannot be applied to given types;
        Observable.defer(() -> {
                  ^
  required: Func0<? extends Observable<? extends T#1>>
  found: ()->{ retu[...]1); }
  reason: no instance(s) of type variable(s) T#3 exist so that Observable<T#3> conforms to ? extends Observable<? extends T#1>
  where T#1,T#2,T#3 are type-variables:
    T#1 extends Object declared in method <T#1>defer(Func0<? extends Observable<? extends T#1>>)
    T#2 extends Object declared in class Observable
    T#3 extends Object declared in method <T#3>from(T#3)
1 error

Java version:

java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions