我有一个带有私有域的类,还有一个带有扩展外部类类型的泛型类型的静态抽象内部类,它试图访问外部类的私有字段,但出现以下错误:-错误:a在外部具有私有访问权限-错误:doSomething在外部具有私有访问权限
见下面的代码:
public abstract class Outer extends SomeOuter
{
private Object a;
private void doSomething(){}
public static absract class Inner<T extends Outer> extends SomeOuter.SomeInner<T> {
public InnerMethod(T p) {
p.a; //error: a has private access in Outer
p.doSomething() //error: doSomething has private access in Outer
}
}
}
我正在用jdk 1.7编译
有人能告诉我为什么我得到这个错误。
静态嵌入类实际上是外部类。它无法访问另一个类的私有成员。请参阅以下问题的公认答案:
Java中的静态嵌套类,为什么?
这就是私有修饰符的工作原理,如果您将任何方法或变量声明为私有的,则不能在类之外访问
内部类可以访问封闭类的私有字段,静态内部类也可以访问封闭类的任何私有成员。
类本身并不是真正的“静态的”
”;没有静态类这样的东西。本例中的static修饰符表示嵌套类是外部类的静态成员。这意味着可以像访问其他静态成员一样访问它,而不需要外部类的实例。
因为它是一个静态成员,所以它能够访问外部类的私有成员,因为类内的私有成员是可访问的。
eg.
class One
{
private int i=0;
class Two
{
void go()
{
System.out.println(new One().i); //accessible
}
}
}
class two
{
private int i=3;
static class one
{
void go()
{
System.out.println(new two().i); //accessible in static class
}
}
}
但是在这里,
Inner<T extends Outer> extends SomeOuter.SomeInner<T>
T是一个扩展到外部的类,并不意味着它是内部的。这就是为什么它会出错。
问题内容: 我有一堂课,还有另一个内部课: 问题答案: 从其他答案中可以看出,您将需要一个非静态内部类来执行此操作。 如果您确实不能使内部类成为非静态类,则可以在外部类中添加所需的getter和setter方法,并通过在内部静态类内部创建外部类的实例来访问它们:
我正在装一个应用程序,它工作得很好。但当我使用 在OuterClass中,并通过
我试图从中的访问,将其放入查询中。我到处都在搜索如何访问它,但到目前为止我什么也没找到。我将非常感谢您的帮助:) 这里有一段代码:
问题内容: 在ES6中,给出以下示例: 如何访问Color.mainDark(静态字段)? 问题答案: 您可以按期望的方式访问它,但是,如果我记得使用Babel并立即导出类时存在一些问题,因此 如果 遇到问题,请在定义类后导出: 您可以在玛丽安(Marian)对类似问题的回答中了解有关巴别塔(Babel)问题的更多信息,该问题据说已在巴别塔(Babel)6.2.1中修复。
我想使用Powermock(基于EasyMock)模拟私有静态内部类。这不是来自生产代码,这只是一个是否可能的问题。我很确定这是一个糟糕的设计,但这是我为科学而努力的东西。 假设我们有一个具有静态私有内部类的类: IExpectationSetters中的andReturn(capture)不能应用于(java.lang.Object) 私人静态内部阶级的嘲笑甚至可能吗?我还没有在SO上找到一个
这是我正在研究的一个更大问题的一个简短的子问题。 为什么我不能通过第8行outer class中的inner class的实例访问outer类字段? 字段在内部类中可见。 外部类中的非静态方法仍然存在此问题。 字段的可见性并不重要。无论从哪种方式,它都可以从内部类中看到。 可以通过内部类中的(私有)getter访问该字段,但我出现问题的原因之一是,我希望避免这些。 它应该成为不可变的构建器模式的一