2016-12-16 3 views
0

Java 8 @FunctionalInterface (일식)을 사용하는 동안 발생한 오류를 복제했습니다. 다음은 컴파일되지 않습니다. Refined 오류 발생 : Function, ReceiverGiver 모두 연장메서드 재정의 및 기능 인터페이스 complie 오류

@FunctionalInterface 
interface Functioner<TFunnel, TFan> { 
    Function<TFunnel, TFan> funnelledThenFanned(); 
} 

@FunctionalInterface 
interface Receiver<T, TFan> 
extends Functioner<Supplier<? extends T>, TFan> {} 

@FunctionalInterface 
interface Giver<TFunnel, T> 
extends Functioner<TFunnel, Supplier<T>> {} 

@FunctionalInterface 
interface Refined<T, R> 
extends Function<T, R>, Receiver<T, Supplier<R>>, Giver<Supplier<? extends T>, R> { 

    @Override 
    public abstract R apply(T arg); 

    @Override 
    public default Function<Supplier<? extends T>, Supplier<R>> funnelledThenFanned() { 
     ... 
    } 

} 

Refined를 오류를 발생; 이들 중 하나를 제거하면 코드가 컴파일됩니다. 이것이 올바른 행동입니까? 그렇다면 어떻게 리팩토링 할 수 있습니까?

UPDATE이 유사한 오류 오는 것 같습니다

: @FunctionalInterface 모든 컴파일하지 않고 또한

@FunctionalInterface 
interface Another<TFunnel, T> 
extends Functioner<TFunnel, Supplier<T>>, Giver<TFunnel, T> { 

    public abstract void newMethod(); 

    @Override 
    public default Function<TFunnel, Supplier<T>> funnelledThenFanned() { 
     ... 
    } 

} 

, 나는이 점에 유의하겠습니다을; 인터페이스 인스턴스는 람다 (lambda)로만 표현 될 수 없습니다.

+0

보고있는 특정 오류는 무엇입니까? –

+0

제공된 코드가 오류없이 컴파일됩니다. – gr7

+0

@ marcus.ramsden ** '@FunctionalInterface'주석이 잘못되었습니다. 정제 된 은 기능 인터페이스가 아닙니다. ** 컴파일러 오류는 '정제 된'인터페이스와 '다른'인터페이스가 기능 인터페이스가 아님을 나타냅니다. lambdas를 사용할 수 없으며 '@FunctionalInterface'주석은 컴파일 오류를 생성합니다. – bizness86

답변

0

이 수치는 Eclipse bug 453552으로 4.6M1로 고정되었으므로 모든 Neon 릴리스 (현재 Neon.1, 곧 Neon.2)에 수정 사항이 포함되어 있습니다.

1

Functioner 추상적 funnelledThenFanned() 방법이 있고,이 Another@FunctionalInterface 의해 부과 1 제한을 초과 2 추상적 방법을 만들고, 추가 newMethod().

여기에는 수수께끼가 없습니다.

+1

'Another'는'newMethod()'를 단일 추상 메소드로 남겨 두는'funnelledThenFanned()'를 정의합니다. – bizness86

0

Eclipse 화성에서 산소로 전환하면이 문제가 해결됩니다. 고맙습니다.