Линия 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;
}
}
}
'Линия ... не работает' Что значит? Расскажите нам, что именно происходит и почему вы считаете, что это неправильно. –
Нет доступного экземпляра типа Test. Должен квалифицировать распределение с помощью экземпляра типа Test (например, x.new A() \t, где x является экземпляром теста). – T4l0n
aah, просто объявите 'SmallBanana' вне' Test'. Или посмотрите этот вопрос: http://stackoverflow.com/questions/9560600/java-no-enclosing-instance-of-type-foo-is-accessible –