Проблема статического вызова в Java - PullRequest
0 голосов
/ 04 июля 2011

У меня проблема с вызовом статического метода из класса.Позвольте мне объяснить себя.У меня есть интерфейс Foo и его реализация FooImpl, которая определяет метод getFoo();:

public interface Foo {
   ...
   public A getFoo();

   ....
}

public class FooImpl implements Foo { 

    public A getFoo(){
        ....
        return new A();
    } 
} 

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

public class Bar {

   Foo foo

   public void fooBar(){
         ......
         foo.getFoo()
         ....
   }
} 

Моя проблема заключается в том, что я бы сделал статический вызов метода fooBar изкласс Bar, но это невозможно, поскольку метод getFoo не определен как статический.Например, я хотел бы сделать что-то вроде этого:

public class Bar2 {

  public void execute(){
     Bar.fooBar()
  }
}

Как мне этого добиться?

Спасибо за ваш совет

[ПРАВИТЬ] Извините, если мне не ясно.Класс Bar имеет ссылку на Foo, поэтому в классе можно вызвать getFoo.И я могу гарантировать, что Foo / FooImpl правильно инициализированы (не мной), и я просто использую информацию, предоставленную этим интерфейсом.

Ответы [ 5 ]

3 голосов
/ 04 июля 2011

Для вызова Bar.fooBar() таким образом будет иметь , чтобы быть статическим, точка.

Вы не показали, как Bar получает экземпляр Foo илиFooImpl для вызова getFoo() - может быть, например, в Bar может быть статическая Foo переменная?

В принципе, здесь недостаточно информации, но рано или поздно у вас будетиметь экземпляр FooImpl не менее и вполне возможно, экземпляр Bar, в зависимости от его требований.

0 голосов
/ 04 июля 2011

Вы должны обязательно создать экземпляр FooImpl внутри static fooBar метода следующим образом:

public static void fooBar(){
         Foo fooImpl = new FooImpl(); // create an isntance
         fooImpl.getFoo(); // call it
         ....
}
0 голосов
/ 04 июля 2011

Вы можете использовать new Bar().fooBar();

0 голосов
/ 04 июля 2011

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

Как правило, такой метод взаимодействует с экземпляром в некотором смысле, например, при доступе к его частным данным.Это также означает, что вызовы метода в разных экземплярах могут возвращать разные результаты.

0 голосов
/ 04 июля 2011

Кажется, вы хотите что-то подобное в Bar:

public static void fooBar() {
  ...
  Foo foo = new FooImpl();
  ...
  foo.getFoo();
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...