我有一堆java类,它们的结构是这样的
class Something {
public static String name;
public static String description;
public void run(String[] args);
}
问题是,它们都是不同的类型。所以如果我尝试创建它们的HashSet并遍历它们
HashSet<Object> things = new HashSet<Object>();
things.add(new Something());
things.add(new Otherthing());
things.forEach(thing -> {
thing.run();
})
它会产生此错误
symbol: variable run
location: variable thing of type java.lang.Object
那么,我怎样才能创建这些对象的可迭代集合并使用它们的属性呢?
1条答案
按热度按时间l0oc07j21#
幸运的是,我们可以通过实现一个合适的函数接口来解决这个问题。
Runnable有一个run()方法,它不接受参数,也不返回任何东西(也就是说,它必须做一些事情)。
因此,只有当你实际上并不打算将String数组作为参数使用时,这才有效,因为你在调用run()时并不包含它。然而,如果你确实需要它,你必须将实现的接口改为Consumer而不是Runnable,并使用accept()来代替,因为这个方法实际上接受一个参数,而不是run()。
现在,我们将HashSet设置为实现的接口的类型,它就可以工作了!
下面是另一个类:
现在,您可以创建任意多个类,并让它们的方法做不同的事情,同时仍然能够将它们聚集在同一个集合中(只要它们实现相同的类型)!
旁注:如果不需要这些属性,可以使用lambda表达式实现不同版本的run()(或accept(),或任何其他函数接口方法)。