当前位置: 代码迷 >> J2SE >> 初学者求解:这段代码为什么会报错
  详细解决方案

初学者求解:这段代码为什么会报错

热度:70   发布时间:2016-04-23 20:33:43.0
菜鸟求解:这段代码为什么会报错
请问这段代码为什么会报错:

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());
  相关解决方案