2014-02-07 3 views
0

У меня проблема с общим классом в Java, и я не уверен, как его решить. Несколько дней назад я начал программирование с помощью java и generics, поэтому это может быть очень хорошо известная проблема. Мое определение класса что-то вроде этого:Вызов статического метода из общего

public Class LocalAuthCommand<T extends LocalAuth> { 
    public LocalAuthCommand() { 
     ... 
    } 

    public String execute() throws CustomException { 
      String result = super.execute(); 
      T obj = T.unMarshall(result); 
    } 
} 

маршализацию статический метод, который применяется во всех подклассов LocalAuth. Все классы T реализуют этот метод, но я не знаю, как заставить Java знать, что unMarshall существует как статический метод в T. Есть идеи, как это решить?

Спасибо!

+0

Статические методы не требуют экземпляра. –

+0

Похоже, что метод лучше не статичный. –

+0

Что делает код, в основном создает объект T с некоторой строкой xml (result). Код для unMarshalling XML-строки является статическим методом в классе T. Мне нужно, чтобы он был статичным, потому что я строю объект с XML, поэтому у меня нет экземпляра, который я могу использовать для вызова метода. – AndoverDev

ответ

0

T стирается во время выполнения, так что ссылка на T замещен с классом ограничивающего LocalAuth в точке вызова unMarshall. Я могу думать о двух способах обойти это:

  1. Явным проходит в Class вы хотите, чтобы unMarshall и сделать вызов рефлекторно.
  2. Сделать execute аннотацию и создать конкретный подкласс LocalAuthCommand для каждого T, так что точный unMarshall метода, который вы хотите звонить по каждому подклассу известен во время компиляции.
+0

Думаю, я поеду с № 2 , это единственный способ реализовать это, не используя рефлексию. Благодаря! – AndoverDev

0

В LocalAuth вы можете либо иметь public static String unMarshall(String result), либо public abstract String unMarshall(String result). У вас не может быть метода, который является абстрактным и статическим.

Смежные вопросы