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
的任何隐含用法)。