有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    首先,您的接口应该声明为FunctionalInterface。 其次,由于doAction方法将Object作为参数,我认为返回它没有意义,除非您想保留原始对象。只需修改方法内的对象,并使方法void。调用该方法后,将修改已传递的对象。(您希望使用Int、Boolean等对象,它们将基本类型封装起来)

    但总体而言,这种方法似乎有点过时且不可靠。因为这将导致您创建if语句,以确保您使用的是正确的类型(正如一些同事在评论中所写的)

    我要做的是使Action通用化

    @FunctionalInterface
    public interface Action<T> {
        T doAction(T argument);
    } 
    

    然后,只需像下面这样声明函数,并在不为它们创建集合的情况下使用它们,因为这将导致编写更多代码以确保类型安全

    Action<Boolean> booleanFunc = (Boolean bool) -> {...};