interface I1 { 
    String get(); 
} 

interface I2 { 
    String get(); 
} 

interface IDefault { 
    default String get() { 
    	return "default"; 
    }; 
} 

public class Foo implements I1, I2, IDefault { 

    @Override 
    public String get() { 
        return "foo"; 
    } 

    public static void main(String[] args) { 
        System.out.print(getOf(new Foo())); 
    } 

 // static <T extends I1 & I2> String getOf(T t) { // OK 
 // static <T extends I1, IDefault> String getOf(T t) { // OK 
    static <T extends I1 & IDefault> String getOf(T t) { // OK with Eclipse compiler, but fails with javac: 
 // ^ 
 // where INT#1 is an intersection type: 
 // INT#1 extends Object,I1,IDefault 
 //1 error 

        return t.get(); 
    } 

} 