【问题标题】:How can I return a class choosing between 2 classes?如何返回在 2 个班级之间选择的班级?
【发布时间】:2019-07-25 11:13:47
【问题描述】:

我想知道是否有一种方法可以在多个类之间进行选择并返回其中一个。

它应该是这样的:

public class BotManager {
public static Test test;
public static int PROTOCOL_VERSION = 114;

public Bot bot(){
    if(PROTOCOL_VERSION == 114){
        return test.bot114;
    }else{
        return test.bot111;
    }
}

在本例中,bot111 和 bot114 是不同的类。

bot.version111.bot.Bot;

bot.version114.bot.Bot;

【问题讨论】:

  • 如果两个返回的类没有共同点,该方法的调用者应该如何以任何有意义的方式使用结果?
  • 我认为你应该阅读一下factory pattern
  • 我怀疑两者都不是一个类,而是不同类的实例......所以这些必须实现相同的接口或扩展相同的类。 (或者方法的返回类型必须是Object,这大多不是很有用)

标签: java class return


【解决方案1】:

当然可以。
您只需要确保 bot114bot111 都扩展了 Bot 类。

出于这些目的,您将使用所谓的工厂,这里是一个工厂示例,它根据类类型返回不同的 Windows:

  public static Window getCsvExportWindow(Class tab) {
        if (tab == OnhandTab.class) {
            return new OnhandCsvExportWindow();
        } else {
            return new CustOrderCsvExportWindow();
        }
   }

您使用 PROTOCOL_VERSION 而不是 Class 类型。

【讨论】:

  • 按问题他们都是Bot,但来自不同的包:bot.version111.bot.Botbot.version114.bot.Bot
【解决方案2】:

你可以使用它的代码:

if (Object object instanceof Bot114) {
  return new Bot114();
} else if (Object object instanceof Bot111) {
  return new Bot111();
} else {
  return null;
}

【讨论】:

  • Object object instanceof Bot114 没有任何意义。并且返回 null 是一种不好的做法。该方法的返回类型是什么?调用者应该如何调用它并使用结果?
  • 这并不能解决问题问题(例如,类是通过PROTOCOL_VERSION的值选择的)
猜你喜欢
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-26
  • 2018-07-24
  • 1970-01-01
相关资源
最近更新 更多