有没有更好的方式做这样的事情(或者甚至有意义):
class A {
public static B buildClass() {
return new B();
}
private class B {
//implementation
}
}
我正在建造一个简单的工厂类。我可以在静态方法中实例化一个非静态成员,这似乎很奇怪,但它似乎有用。
关于如何改善这一点的任何建议?
答案 0 :(得分:1)
你有正确的想法,但通常这个类不是私有的,而是构造函数。
public class MakeHello
{
public static MakeHello CreateHello()
{
return new MakeHello();
}
private MakeHello()
{
}
}
和其他地方
var a = MakeHello.CreateHello();
// Can't instantiate because private
var b = new MakeHello();
答案 1 :(得分:1)
静态方法不能使用INSTANCE字段或定义的类的方法 您的调用不使用类A的方法的任何实例字段。它创建一个B类的新实例并尝试返回它。在这里你有一个导致编译失败的问题。 B类是A的私有,不能通过A的公共方法返回,因为外部世界(A外)对B一无所知。公开
例如:
class A
{
public int publicField = 0;
public static B buildClass()
{
// Fails, it is an instance field, cannot be used by a static method
// without creating an instance of class A
publicField++;
// Works, create an instance of A and use its public fields
A myself = new A();
myself.publicField++;
// works because B is public
return new B();
}
public class B
{
//implementation
}
}