2015-11-18 4 views
-2

Линия List<Banana>list3=filter(list, new SmallBanana()); не компилировать с сообщением:Как передать в качестве аргумента класс, реализующий интерфейс вместо интерфейса?

Нет ограждающих экземпляр типа Test не доступен. Должен квалифицировать выделение с помощью экземпляра типа Test (например, x.new A(), где x является экземпляром Test).

Я хотел знать, как я могу передать это, а не сам интерфейс, если это возможно.

class Banana { 
    int length; 
    int width; 
    Banana(int length, int width) { 
     this.length=length;this.width=width; 
    } 
    public int getLenght() {return length;} 
    public int getWidth(){return width;} 
} 

public class Test { 

public static void main(String[] args){ 
    List<Banana>list = new ArrayList<>(); 
    List<Banana>list2=filter(list, (a)->a.length>15&&a.width>4); 
    List<Banana>list3=filter(list, new SmallBanana());  
} 

interface Filter{ 
    boolean test(Banana banana); 
} 

public static List<Banana> filter(List<Banana>list, Filter f){ 
    List<Banana>newBanana = new ArrayList<>(); 
    for(Banana y : list){ 
     if(f.test(y)) 
      newBanana.add(y); 
    } 
    return newBanana; 
} 

class SmallBanana implements Filter{ 
    public boolean test(Banana banana){ 
     return banana.length<15&&banana.width<4; 
    } 
} 

} 
+0

'Линия ... не работает' Что значит? Расскажите нам, что именно происходит и почему вы считаете, что это неправильно. –

+0

Нет доступного экземпляра типа Test. Должен квалифицировать распределение с помощью экземпляра типа Test (например, x.new A() \t, где x является экземпляром теста). – T4l0n

+2

aah, просто объявите 'SmallBanana' вне' Test'. Или посмотрите этот вопрос: http://stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible –

ответ

1

Это не работает, потому что SmallBanana является внутренний класс Test и так как он не является статическим внутренним классом, вы main() не можете получить доступ к нему напрямую, вы можете либо пометить SmallBanana как статические или использовать

Test t =new Test(); 
SmallBanana b = t.new SmallBanana(); 
Смежные вопросы