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中粘贴消息文本。这在大多数情况下都很有用。