Java如何使用可变参数方法和泛型返回类型实现接口(interface)

标签 java functional-programming generic-programming

我正在尝试实现一个 U.I.用户将在控制台中输入一个值,我的程序应该调用一个函数,该函数要么只执行并修改某些值,要么执行并返回某些内容。无论哪种情况,该函数都可以带参数,也可以不带参数。

所以在这一点上,这基本上听起来像 getter 和 setter,但我不想以这种方式完全实现它,这是为了避免必须经过 10 多个 if 语句来确定对任何给定的操作用户输入。

所以我的解决方案是在我的类中创建类似这样的接口(interface),对于我想要运行的每个 Activity ,我使用此接口(interface)创建它的实例:

private interface DoActivity <R> {
    public R execute(Object... param);
}

当我不想指定传递给执行方法的参数类型,但当我使用它的执行方法创建像这样的 DoActivity 实例时,这适用于:

private class setPerson implements DoActivity {
    @Override
    public Void execute(String name, String telephone) {
        ...
        return null;
    }
}

我收到上述错误: 方法未实现或重写父类(super class)型的方法 有没有办法在不诉诸反射的情况下做我想做的事?

使用示例:

// at prompt
>> Enter an operation: 1 Bumble Bee
>> ...

// In program
String input = "1 Bumble Bee";
String split[] = input.split();
int operation = Integer.parseInt(split[0]);
DoActivityArray[operation - 1].execute(split[1], split[2]);

最佳答案

对于您的特定示例,解决方案实际上非常简单:

private class setPerson implements DoActivity{
    @Override
    public Object execute(final Object ...params){
        if(params.length != 2)
            throw new RuntimeException(
                "setPerson must take an array of exactly two strings");
        try{
            final String name = (String)params[0];
            final String telephone = (String)params[1];
            ...
            return null;
        } catch(ClassCastException cce){
            throw new RuntimeException(
                "setPerson must take an array of exactly two strings");
        }
    }
}

关于Java如何使用可变参数方法和泛型返回类型实现接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26321031/

相关文章:

c++ - 从返回类型推断类型 T 的模板

c# - 解决依赖关系和构建树的算法

java - 使组件对 Swing 中的拖动不太敏感

java - 将列表映射的所有组合生成为列表列表

java - Jsoup 获取重定向的 URL

.net - 您将 f# 用于哪些代码领域?

java - 在Java中实现函数fold_right

java - Spring Boot 单页应用程序在任何 URL 上进行路由

python - 功能广度优先搜索

c# - 当对象是 Task<Something> 时获取 Func<object> 的结果