1

是否可以在对象创建范围内访问私有静态方法?类似于下面的代码片段。

class A {
   private static void func(int x) {
      /*Some Code here*/
   }
}

并从另一个上下文中调用,如下所示:

new A(){{
  func(2);
}};

此处的目的是促进对 的更多调用func(int),为每个调用使用不同的参数,或者更简单地说,为 type 的对象添加某种构建器A

像这样的东西:

new A() { {
    func(2);
}
{
    func(3);
}
// ...
};

这有可能实现吗?

4

2 回答 2

1

我认为您可以通过实际编写一些简单的代码并自己尝试一下,轻松找到答案。

据我了解(没有尝试过)这是不可能的。

我认为您必须了解以下内容的含义:

new A() { { func(2); } }

这是匿名内部类,就像写类似的东西

class A_anonymous extends A {
  { 
    func(2); 
  }
}

并做一个

new A_anonymous();

进一步查看类定义,其实是翻译成

class A_anonymous extends A {
  public A_anonymous() { 
    func(2); 
  }
}

所以答案是显而易见的。如果 func() 是 A 中的私有方法,那么你当然不能这样使用它。

解决的方法是简单地使方法的可见性受到保护(或更高)。

于 2013-02-26T06:03:31.253 回答
0

是否可以在对象创建范围内访问私有静态方法?

是的。

在构造函数中,您可以调用静态方法。

class AClass
{
    private void static aMethod1()
    {

    }

    private void static aMethod2()
    {

    }

    public AClass()
    {
        aMethod1();
        aMethod2();
    }
}
于 2013-02-26T06:01:17.093 回答