Статическая функция Java на дженериках - PullRequest
4 голосов
/ 04 марта 2011

Эй, я пытаюсь написать функцию, которая вызывает статическую функцию, основанную на ее общих аргументах. У меня следующий код:

public class Model<T extends Listable>
{
    private Document doc;

    /*
        When the JavaBean is created, a Document object is made using
        the Listable parameter. The request string for the specific
        type is used to pull XML-data from the cloud.
    */
    public Model()
    {
        try
        {
            doc = cloud.request(T.getRequestString());
        }
        catch(Exception e)
        {
        }
    }

    /*
        getMatches (used in JSP as "foo.matches") generates a list
        of objects implementing the Listable interface.
    */
    public List<Listable> getMatches()
    {
        return T.generateMatches(doc);
    }
}

Как мне это сделать, я просто получаю кое-что о статических контекстах. «на нестатический метод generateMatches(org.jdom.Document) нельзя ссылаться из статического контекста»

Ответы [ 3 ]

4 голосов
/ 05 марта 2011

Превратил комментарий в ответ:

Вы можете ввести переменную экземпляра типа T и вызвать generateMatches для этого.Вы не можете вызывать generateMatches для самого типа T.

Вы можете, например, внедрить эту переменную экземпляра через конструктор и сохранить ее в закрытой переменной:

private T instanceOfT;

public Model(T instanceOfT){
    this.instanceOfT= instanceOfT;
}

В вашем методе getMatches вы можете затемсделать это:

return instanceOfT.generateMatches(doc);
2 голосов
/ 04 марта 2011

Ваша проблема в том, что у вас нет дескриптора любого объекта класса T. Просто сказать T.generateMatches(doc) означает, что вы делаете статический вызов статического метода в классе T. Вам нужна переменная типа T для вызова методов экземпляра.

0 голосов
/ 04 марта 2011

В чем вопрос?

Причина понятна - строка "T.generateMatches (doc);"вызывает generateMatches через T, а T - это тип (класс / интерфейс), а не экземпляр.

...