java类具有不同的参数作为方法的参数

标签 java

我有一个非常不典型的问题。在我的应用程序中,我有以下代码:

public TaskListDatabases getTaskListDatabases (int mode) {
    switch (mode) {
        case (MODE_NORMAL): 
            if (taskListDatabases == null) {
                taskListDatabases = new TaskListDatabases(app); // 1st place
            }
            break;
        case (MODE_FORCE_RERUN): 
            if (taskListDatabases == null) {
                taskListDatabases = new TaskListDatabases(app); // 2nd place
            } else {
                if (taskListDatabases.getStatus() == AsyncTask.Status.FINISHED)
                    taskListDatabases = new TaskListDatabases(app); // 3rd place
            }
            break;
    }
    return taskListDatabases;
}

现在我想创建 4 个其他函数,与上面的函数类似,但实际对象构造位置有所不同(用注释标记)。

在第一个而不是new TaskListDatabases(app)中,我希望在第二个新任务( app, String, int),在第三个新任务 (app, String, String, String)....

其余的都一样。我想知道是否有机会创建一个将 new TaskListDatabases(app) 部分作为“参数”的函数。如果这只是类的问题,那不会是问题,因为我会有“类参数”。然而这里每个类也有不同的构造函数参数。

有什么想法吗?

最佳答案

你想要的是 abstract factory实现为 anonymous callback背后facade 。使困惑?希望不会是这样:

定义匿名回调接口(interface):

private interface TaskFactory {
    Task create();
}

重构基本方法以使用工厂

private Task getTask (int mode, TaskFactory factory) {
    switch (mode) {
        case MODE_NORMAL: 
            if (taskListDatabases == null) {
                taskListDatabases = factory.create();
            }
            break;
        case (MODE_FORCE_RERUN): 
            if (taskListDatabases == null) {
                taskListDatabases = factory.create();
            } else {
                if (taskListDatabases.getStatus() == AsyncTask.Status.FINISHED)
                    taskListDatabases = factory.create();
            }
            break;
    }
    return taskListDatabases;
}

然后为每个目的创建外观方法:

public Task getTaskListDatabases(int mode) {
    return getTask(mode,
        new TaskFactory() {
            Task create() {
                return new TaskListDatabases(app);
            }
        }
    }
}

public Task getTaskOther(int mode) {
    return getTask(mode,
        new TaskFactory() {
            Task create() {
                return new Task(app, "foo", 7; // eg
            }
        }
    }
}

// etc for other Task flavours

关于java类具有不同的参数作为方法的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19349240/

相关文章:

Java 无法加载或找到主类

c# - java/C#.NET在windows上执行linux操作

java - 用 Java 读取 HDFS 和本地文件

java - 整数字段的 Bean 验证

java - 替换运行时对 System.currentTimeMillis() 的调用

java - 如何将解决方案从递归方法调用传递到调用方法? (回溯算法)

java - java.NumberFormat 如何获取区域设置的默认值

java - 难以从其他 Activity/类(class)控制 webview

java - Storm 集群重复元组

Java - 防暴 API