第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 :(得分:1)
它不起作用,因为SmallBanana
是Test
的内部类,并且由于它不是静态内部类,因此main()
无法访问直接,您可以将SmallBanana
标记为静态或使用
Test t =new Test();
SmallBanana b = t.new SmallBanana();