Нужна абстрактная функция, которая может возвращать разные типы массивов - PullRequest
0 голосов
/ 06 апреля 2020

Я работаю с библиотекой с методом JPanel makeBarGraph(Type[] dataX, Type[] dataY);, который был перегружен. «Тип» может быть String, Integer, LocalDateTime ... и многими другими типами.

В настоящее время у меня есть класс данных Post, который имеет несколько полей нескольких разных типов. Я сделал enum, который содержит каждое поле в этом классе данных с именем «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);

Предполагается, что функция вернуть массив указанного c типа. Таким образом, я могу написать следующую функцию в моем основном классе:

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

Проблема в том, что вы не можете перегружать методы в Java, дифференцируя их тип возвращаемого значения, поэтому мой код не будет компилироваться , Есть ли другой способ сделать это, чтобы мне не пришлось прибегать к длинному списку операторов if if или case?

Ответы [ 2 ]

0 голосов
/ 06 апреля 2020

Какой вызванный метод перегружен, определяется во время компиляции

Ссылаясь на Stati c Vs. Dynami c Связывание в Java

Поскольку перегруженные методы связаны с использованием stati c привязка , а привязка stati c происходит во время компиляции , даже если у вас есть обобщенный c метод getContent, возвращающий разные типы для каждого перечисления, компилятор не может определить, какой перегруженный makeBarGraph вы вызываете во время компиляции.

Предложение

Предположим, вы ищете JPanel, вы можете добавить абстрактный метод JPanel getBarGraph в классе enum. Тогда каждый экземпляр в перечислении может реализовать этот метод и вызвать требуемый перегруженный makeBarGraph метод в библиотеке.

0 голосов
/ 06 апреля 2020

Пожалуйста, используйте Generi c type

Ссылка на Stackoverflow Как мне сделать метод, возвращающий тип generi c?

...