Java 如何将实现接口而不是接口的类作为参数传递?

Java 如何将实现接口而不是接口的类作为参数传递?,java,interface,Java,Interface,行list3=filter(list,new SmallBanana())不使用消息编译: 无法访问类型测试的封闭实例。必须使用类型测试的封闭实例限定分配(例如x.new A(),其中x是测试实例) 我想知道如果可能的话,我如何传递它而不是接口本身 class Banana { int length; int width; Banana(int length, int width) { this.length=length;this.width=width

list3=filter(list,new SmallBanana())不使用消息编译:


无法访问类型测试的封闭实例。必须使用类型测试的封闭实例限定分配(例如x.new A(),其中x是测试实例)

我想知道如果可能的话,我如何传递它而不是接口本身

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;
    }
}

}
class香蕉{
整数长度;
整数宽度;
香蕉(整数长度,整数宽度){
this.length=长度;this.width=宽度;
}
public int getLength(){return length;}
public int getWidth(){return width;}
}
公开课考试{
公共静态void main(字符串[]args){
Listlist=新的ArrayList();
list2=过滤器(列表(a)->a.length>15&&a.width>4);
List3=过滤器(列表,新的SmallBanana());
}
接口滤波器{
布尔检验(香蕉);
}
公共静态列表筛选器(列表、筛选器f){
ListnewBanana=新的ArrayList();
用于(香蕉y:列表){
如果(f.测试(y))
加上(y);
}
返回纽巴纳纳;
}
类实现过滤器{
公共布尔测试(香蕉香蕉){

return banana.length它不起作用,因为
SmallBanana
Test
的一个内部类,而且它不是一个静态的内部类,您
main()
不能直接访问它,您可以将
SmallBanana
标记为静态或使用

Test t =new Test();
SmallBanana b = t.new SmallBanana();

行…不起作用
你的意思是什么?告诉我们到底发生了什么,为什么你认为这是错误的。没有可访问的封闭式类型测试实例。必须使用封闭式类型测试实例限定分配(例如,x.new A(),其中x是测试实例).aah,只需在
Test
之外声明
SmallBanana
。或者检查以下问题:这里有一个提示:如果你有一个神秘的编译错误,只需在google中粘贴消息文本。这在大多数情况下都很有用。