Java中的一个静态调用问题

Java中的一个静态调用问题,java,static,Java,Static,我在从类调用静态方法时遇到问题。让我解释一下。 我有一个接口Foo和他的实现FooImpl,它定义了方法getFoo(): public interface Foo { ... public A getFoo(); .... } public class FooImpl implements Foo { public A getFoo(){ .... return new A(); } } 这个接口和他的实现是提供的

我在从类调用静态方法时遇到问题。让我解释一下。 我有一个接口
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()
         ....
   }
} 
我的问题是,我想对类
Bar
的方法
fooBar
进行静态调用,但这是不可能的,因为方法
getFoo
未定义为静态。 例如,我想做这样的事情:

public class Bar2 {

  public void execute(){
     Bar.fooBar()
  }
}
我怎样才能做到这一点

谢谢你的建议

[编辑] 对不起,我不清楚。类栏引用了Foo,因此可以在类中调用
getFoo
。我可以保证Foo/FooImpl是正确初始化的(不是由我初始化的),我只使用这个接口提供的信息。

要以这种方式调用
Bar.fooBar()
,它必须是静态的

您还没有显示
Bar
如何获取
Foo
FooImpl
的实例来调用
getFoo()
-例如
Bar
中是否存在静态
Foo
变量

基本上这里没有足够的信息,但迟早你至少要有一个
FooImpl
的实例,很可能还有一个
Bar
的实例,这取决于它的要求。

要以这种方式调用
Bar.fooBar()
,它必须是静态的,period

您还没有显示
Bar
如何获取
Foo
FooImpl
的实例来调用
getFoo()
-例如
Bar
中是否存在静态
Foo
变量


基本上这里没有足够的信息,但迟早你至少要有一个
FooImpl
的实例,很可能还有一个
Bar
的实例,这取决于它的要求。

看起来你希望在
Bar
中有这样的东西:

public static void fooBar() {
  ...
  Foo foo = new FooImpl();
  ...
  foo.getFoo();
  ...
}

您似乎希望在
栏中看到类似的内容:

public static void fooBar() {
  ...
  Foo foo = new FooImpl();
  ...
  foo.getFoo();
  ...
}

你不能那样做。非静态方法的全部要点是,它需要对实例进行调用


通常,这种方法会以某种方式与实例交互,比如访问其私有数据。这还意味着在不同实例上调用该方法可能会返回不同的结果。

您不能这样做。非静态方法的全部要点是,它需要对实例进行调用


通常,这种方法会以某种方式与实例交互,比如访问其私有数据。这还意味着在不同实例上调用该方法可以返回不同的结果。

您可以使用
newbar().fooBar()

您可以使用
newbar().fooBar()

您必须确保在
静态fooBar
方法中创建
FooImpl
的实例,如下所示:

public static void fooBar(){
         Foo fooImpl = new FooImpl(); // create an isntance
         fooImpl.getFoo(); // call it
         ....
}

您必须确保在
静态fooBar
方法中创建
FooImpl
的实例,如下所示:

public static void fooBar(){
         Foo fooImpl = new FooImpl(); // create an isntance
         fooImpl.getFoo(); // call it
         ....
}

Bar
类中,您的
Foo
实现在哪里?声明
Bar2。作为
静态执行
?我想我不明白你的问题。你能详细解释一下为什么要这样做吗?
getFoo()
在你的
fooBar()
示例中暗示了
this.getFoo()
。但是,如果
Bar
没有扩展
FooImpl
(或者至少实现
Foo
),就像在您的示例中看到的那样,不清楚调用了什么
getFoo()
getFoo()
的目标对象是什么?谢谢您的评论。我正在Eclipse框架之上工作。提供了Foo和FooImpl,并已正确初始化@Bruno Foo的目标是一个类(在这个例子中是类a),它有一些我需要的信息。自从我写上一篇评论以来,你已经添加了更多的信息。根据您所写的内容,目标是
Bar
的当前(
this
)实例的
foo
字段中的实例。如@Jon Skeet所说,要实现您想要的功能,您至少需要将
Bar
中的
Foo-Foo
void-fooBar
转换为
静态
成员(删除
this
的任何隐含用法).您的
Foo
实现在
Bar
类中的何处?声明
Bar2.作为
静态执行
?我想我不明白你的问题。你能详细解释一下为什么要这样做吗?
getFoo()
在你的
fooBar()
示例中暗示了
this.getFoo()
。但是,如果
Bar
没有扩展
FooImpl
(或者至少实现
Foo
),就像在您的示例中看到的那样,不清楚调用了什么
getFoo()
getFoo()
的目标对象是什么?谢谢您的评论。我正在Eclipse框架之上工作。提供了Foo和FooImpl,并已正确初始化@Bruno Foo的目标是一个类(在这个例子中是类a),它有一些我需要的信息。自从我写上一篇评论以来,你已经添加了更多的信息。根据您所写的内容,目标是
Bar
的当前(
this
)实例的
foo
字段中的实例。如@Jon Skeet所说,要实现您想要的功能,您至少需要将
Bar
中的
Foo-Foo
void-fooBar
转换为
静态
成员(删除
this
的任何隐含用法)。