lambda in a static method of an interface
Mike Duigou
mike.duigou at oracle.com
Mon Apr 1 09:49:35 PDT 2013
Also present in Mercurial tip unless very recently fixed.
Mike
On Apr 1 2013, at 05:04 , Remi Forax wrote:
> This code currently compiles but doesn't work at runtime
>
> public interface User {
> public default String firstName() {
> return transform(0);
> }
>
> public default String lastName() {
> return transform(1);
> }
>
> public abstract String transform(int index);
>
> public static User User(String firstName, String lastName) {
> return ref -> (ref == 0)? firstName: lastName;
> }
>
> public static void main(String[] args) {
> User bob = User("Bob", "Vance");
> System.out.println(bob.firstName());
> System.out.println(bob.lastName());
> }
> }
>
> Exception in thread "main" java.lang.IncompatibleClassChangeError: Class
> java.lang.String does not implement the requested interface User
> at User$$Lambda$1.transform(Unknown Source)
> at User.firstName(User.java:3)
> at User$$Lambda$1.firstName(Unknown Source)
> at User.main(User.java:18)
>
> I believe it's a bug in javac, the desugared method is not declared
> static but should:
> public java.lang.String lambda$0(java.lang.String, java.lang.String,
> int);
>
> BTW, I use the b83 binary build, not the lastest mecurial tip.
>
> cheers,
> Rémi
>
>
>
More information about the lambda-dev
mailing list