Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法有时返回值,有时不返回值。如何重构它?_Java - Fatal编程技术网

Java 方法有时返回值,有时不返回值。如何重构它?

Java 方法有时返回值,有时不返回值。如何重构它?,java,Java,界面如下所示: public interface RunnableAction { Optional<?> run(final Action action, final Context Context); } 公共接口RunnableAction { 可选运行(最终操作、最终上下文); } 这个接口有很多不同的实现 问题是: 有些操作需要返回一些数据,例如ActionReadFromFile,但有些操作返回的数据没有好的理由(在这种情况下,我返回Optional.empt

界面如下所示:

public interface RunnableAction
{
    Optional<?> run(final Action action, final Context Context);
}
公共接口RunnableAction
{
可选运行(最终操作、最终上下文);
}
这个接口有很多不同的实现

问题是:

有些操作需要返回一些数据,例如ActionReadFromFile,但有些操作返回的数据没有好的理由(在这种情况下,我返回Optional.empty()),例如ActionCloseWindow。如何使它更好一点?i、 e.需要时返回,没有任何有意义的东西可以或应该返回时,不要返回任何东西。这将通过消除“return Optional.empty()”或“.get()”之类的内容,使代码更干净


有什么建议或暗示?

< P>我认为最好的解决方法是C++风格:D 不要返回值,而是传递一些值,让它在方法中更改。例如,传递所需数据的收集。在该调用之后,集合是否为空:

public interface RunnableAction<T>
{
    void run(final Action action, final Context Context, Collection<T> pickedData);
}
公共接口RunnableAction
{
void run(最终操作、最终上下文上下文、集合pickedData);
}

对于不返回任何内容的实现,可以使用泛型和
Void

public interface RunnableAction<T>
{
    T run(final Action action, final Context Context);
}

class Foo implements RunnableAction<Void>
{
    public Void run(final Action action, final Context Context)
    {
        //do something

        return null; // Void is not instantiable, so return null
    }
}
公共接口RunnableAction
{
T运行(最终操作、最终上下文);
}
类Foo实现RunnableAction
{
公共作废运行(最终操作、最终上下文)
{
//做点什么
return null;//Void不可实例化,因此return null
}
}
或者有两种类型的动作:

public interface CallableAction<T>
{
    T run(final Action action, final Context Context);
}

public interface RunnableAction
{
    void run(final Action action, final Context Context);
}
公共接口CallableAction
{
T运行(最终操作、最终上下文);
}
公共接口运行过滤
{
无效运行(最终操作、最终上下文);
}

apply Tell,不要问!原则。返回null和Optional.empty之间的区别在哪里?对我来说,两者都是bed。我做了类似的事情,但没有使用额外的参数,但我扩展了一个动作接口,如下所示:公共接口动作{void setResult(Object result);Object getResult();T getResult(Class type);}