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

时间:2015-11-18 04:11:25

标签: java interface

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

}

1 个答案:

答案 0 :(得分:1)

它不起作用,因为SmallBananaTest的内部类,并且由于它不是静态内部类,因此main()无法访问直接,您可以将SmallBanana标记为静态或使用

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