请问这段代码为什么会报错:
package com.test;
import java.util.HashSet;
import java.util.Set;
public class Foo {
class Bar{};
Bar bar;
private Foo(Bar bar){
this.bar = bar;
}
public static Foo getInstanceByFoo()
{
return new Foo(new Bar());
}
public static void main(String[] args) {
Foo f = Foo.getInstanceByFoo();
}
}
在这句话报错
return new Foo(new Bar());
------解决方案--------------------
或者 加 static
如 static class Bar{};
------解决方案--------------------
你的Bar本来就是Foo的内部类,要产生内部类的实例需要使用外部类,可你的外部类的构造又必须使用一个内部类的实例。
你可以吧内部类变成静态的,这样就可以通过外部类名得到内部类对象。改成这样:
public class Foo {
static class Bar{};
Bar bar;
private Foo(Bar bar){
this.bar = bar;
}
public static Foo getInstanceByFoo()
{
return new Foo(new Foo.Bar());
}
我也是新手,希望没有答错。。
------解决方案--------------------
静态调用 。
public class Foo {
class Bar {
};
Bar bar;
private Foo(Bar bar) {
this.bar = bar;
}
public Foo getInstanceByFoo() {
return new Foo(new Bar());
}
public static void main(String[] args) {
// Foo f = Foo.getInstanceByFoo();
}
}
-------------------------
public class Foo {
static class Bar {
};
Bar bar;
private Foo(Bar bar) {
this.bar = bar;
}
public static Foo getInstanceByFoo() {
return new Foo(new Bar());
}
public static void main(String[] args) {
Foo f = Foo.getInstanceByFoo();
}
}
--------------------------
public class Foo {
Bar bar;
private Foo(Bar bar) {
this.bar = bar;
}
public static Foo getInstanceByFoo() {
return new Foo(new Bar());
}
public static void main(String[] args) {
Foo f = Foo.getInstanceByFoo();
}
}
class Bar {
};
------解决方案--------------------
//return?new?Foo(new?Bar());
既然Bar是Foo的一个成员,当然要用实例.成员名来访问。
但你这样写,Foo都还没有创造出来,哪里来的Foo实例.new Bar()。
建议添加一个默认构造函数 public Foo(){}
然后return?new?Foo(new Foo().new?Bar());