菜鸟求解:这段代码为什么会报错

lever716 2014-07-10 01:56:06
请问这段代码为什么会报错:

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()); 
...全文
149 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lever716 2014-07-10
  • 打赏
  • 举报
回复
引用 4 楼 ShawnAnn 的回复:
你的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()); } 我也是新手,希望没有答错。。
你说的没错,谢谢
lever716 2014-07-10
  • 打赏
  • 举报
回复
引用 6 楼 xiaopeipei2004 的回复:
//return new Foo(new Bar()); 既然Bar是Foo的一个成员,当然要用实例.成员名来访问。 但你这样写,Foo都还没有创造出来,哪里来的Foo实例.new Bar()。 建议添加一个默认构造函数 public Foo(){} 然后return new Foo(new Foo().new Bar());
恩,这是种解决方法,谢谢
tony4geek 2014-07-10
  • 打赏
  • 举报
回复
内部类 ,静态,动态之间的调用
grapepaul 2014-07-10
  • 打赏
  • 举报
回复
//return new Foo(new Bar()); 既然Bar是Foo的一个成员,当然要用实例.成员名来访问。 但你这样写,Foo都还没有创造出来,哪里来的Foo实例.new Bar()。 建议添加一个默认构造函数 public Foo(){} 然后return new Foo(new Foo().new Bar());
tony4geek 2014-07-10
  • 打赏
  • 举报
回复
静态调用 。

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 {
};
ShawnAnn 2014-07-10
  • 打赏
  • 举报
回复
你的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()); } 我也是新手,希望没有答错。。
tony4geek 2014-07-10
  • 打赏
  • 举报
回复
或者 加 static 如 static class Bar{};
lever716 2014-07-10
  • 打赏
  • 举报
回复
引用 1 楼 rui888 的回复:
class Bar{};这个移动到最外面。
请问为什么要放到最外面?
tony4geek 2014-07-10
  • 打赏
  • 举报
回复
class Bar{};这个移动到最外面。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧