2013-07-31 2 views
0

Я реализую класс java, который реализует интерфейс.
Пои, что метод в этом классе должен быть статичным, но в интерфейсе я не могу (как известно) объявить метод как статический, и если я попытаюсь объявить его в классе, я получаю эту ошибку: «Этот статический метод не может скрыть метод экземпляра из InterfaceName».Как реализовать статический метод в классе, реализующем интерфейс?

Я искал на этом сайте, но я не нашел никакого решения, но было предложено создать абстрактный класс, который реализует интерфейс, а затем расширяет абстрактное в классе, но он не работает.

Любое предложение?

Спасибо всем!

+0

Либо использовать другое имя или разные список аргументов. – andy256

+1

Вам нужно переопределить статический метод? я не думаю, что это возможно даже в java – Breavyn

+2

http://stackoverflow.com/questions/512877/why-cant-i-define-a-static-method-in-a-java-interface – mvw

ответ

1

Ссылка mvw posted (Why can't I define a static method in a Java interface?) описывает причину не допускать статические методы в интерфейсах и почему переопределение статических методов не является хорошей идеей (и, следовательно, не разрешается).

Было бы полезно знать, в какой ситуации вы хотите использовать статический метод. Если вы просто хотите вызвать статический метод класса, дайте ему другое имя, как предложили andy256. Если вы хотите вызвать его из объекта со ссылкой на интерфейс, действительно ли вам нужен статический метод?

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

class MyClass implememts SomeInterface { 

    @Override 
    public int someMethod(int arg1, int arg2) { 
     return staticMethod(arg1, arg2); 
    } 

    private static int staticMethod(int arg1, int arg2) { 
     // TODO: do some useful stuff... 
     return arg1 + arg2; 
    } 
}