【问题标题】:Need an abstract function that can return different types of arrays需要一个可以返回不同类型数组的抽象函数
【发布时间】:2020-04-06 05:07:11
【问题描述】:

我正在使用一个带有方法JPanel makeBarGraph(Type[] dataX, Type[] dataY); 的库,该方法已被重载。 “类型”可以是 String、Integer、LocalDateTime... 和许多其他类型。

我目前有一个数据类 Post,它有几个不同类型的字段。我创建了一个枚举,其中包含此数据类中名为“Content”的每个字段,并创建了一个名为 getContent() 的抽象函数,枚举中的每个项目都实现如下:

AUTHOR {
    public String[] getContent(SocialMediaFramework f, Post[] p, String data) {

    }
},
LIKES {
    public Integer[] getContent(SocialMediaFramework f, Post[] p, String data) {

    }
};

    public abstract String[] getContent(SocialMediaFramework f, Post[] p);
    public abstract Integer[] getContent(SocialMediaFramework f, Post[] p);

该函数应该返回一个特定类型的数组。这样,我可以在我的主类中编写以下函数:

public void displayBarGraph(Content type1, Content type2) {
    frame.add(makeBarGraph(type1.getContent(), type2.getContent());
}

问题是,你不能通过区分它们的返回类型来重载 Java 中的方法,所以我的代码不会编译。有没有其他方法可以让我不必求助于一长串 if else 或 case 语句?

【问题讨论】:

  • 请注意,您可能必须为学校作业返回一个数组,但 List 通常比数组更受欢迎,在这种情况下,Map<Post, ?> 对您的调用者来说会更方便,谁不会必须非常小心地对物品进行分类。

标签: java oop types overloading


【解决方案1】:

请使用通用类型

Stackoverflow 参考How do I make the method return type generic?

【讨论】:

    【解决方案2】:

    调用哪个 Overrloaded 方法在编译时确定

    参考Static Vs. Dynamic Binding in Java

    由于使用静态绑定绑定重载方法,并且静态绑定发生在编译时,即使你有泛型方法getContent为每个枚举返回不同的类型,编译器无法判断您在编译时调用了哪个重载的makeBarGraph

    建议

    假设您要查找的结果是JPanel,您可以在枚举类中添加一个抽象方法JPanel getBarGraph。然后枚举中的每个实例都可以实现该方法并调用库中所需的重载makeBarGraph方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      相关资源
      最近更新 更多