我有两个类,并希望在另一个类中包含一个类的静态实例,并通过第一个类访问第二个类中的静态字段.
这样我可以使用相同名称的不同实例.
Class A { public static package1.Foo foo; } Class B { public static package2.Foo foo; } //package1 Foo { public final static int bar = 1; } // package2 Foo { public final static int bar = 2; } // usage assertEquals(A.foo.bar, 1); assertEquals(B.foo.bar, 2);
这有效,但我得到一个警告"静态字段Foo.bar应该以静态方式访问".有人可以解释为什么会这样,并提供"正确"的实施.
我意识到我可以直接访问静态实例,但是如果你有一个很长的包层次结构,那就太丑了:
assertEquals(net.FooCorp.divisions.A.package.Foo.bar, 1); assertEquals(net.FooCorp.divisions.B.package.Foo.bar, 2);
Jason Cohen.. 10
你应该使用:
Foo.bar
并不是:
A.foo.bar
这就是警告的意思.
原因是它bar
不是实例的成员Foo
.相反,bar
在课堂上是全球性的Foo
.编译器希望您全局引用它,而不是假装它是实例的成员.
你应该使用:
Foo.bar
并不是:
A.foo.bar
这就是警告的意思.
原因是它bar
不是实例的成员Foo
.相反,bar
在课堂上是全球性的Foo
.编译器希望您全局引用它,而不是假装它是实例的成员.