java创建字符串到接口的映射,接口/函数参数和返回类型不同
我试图实现一个Map<String, Interface>
,其中所讨论的接口接收并返回一个通用值,这样映射中的不同函数可以有不同的返回类型,但仍然使用相同的接口。我不太确定它将如何工作,但目标将是实现以下几点
// A generic interface of some kind
public interface Action {
Object doAction(Object object);
}
// The class which implements the map
public class MyClass {
public void example() {
HashMap<String, Action> map = new HashMap<>();
// this takes in a boolean and returns the opposing value
map.put("functionOne", (boolean bool) -> !bool);
// this takes in an integer, increments it and returns it.
map.put("functionTwo", (int integer) -> integer++);
...
}
}
显然,这个伪代码是不对的,我可能偏离了正轨,但我希望它能让您理解我试图实现的目标。任何帮助都将不胜感激
# 1 楼答案
首先,您的接口应该声明为
FunctionalInterface
。 其次,由于doAction
方法将Object
作为参数,我认为返回它没有意义,除非您想保留原始对象。只需修改方法内的对象,并使方法void
。调用该方法后,将修改已传递的对象。(您希望使用Int、Boolean等对象,它们将基本类型封装起来)但总体而言,这种方法似乎有点过时且不可靠。因为这将导致您创建
if
语句,以确保您使用的是正确的类型(正如一些同事在评论中所写的)我要做的是使
Action
通用化然后,只需像下面这样声明函数,并在不为它们创建集合的情况下使用它们,因为这将导致编写更多代码以确保类型安全