Java : Is it possible to access private static method

标签 java builder

是否可以在对象创建范围内访问私有(private)静态方法?像下面的代码片段一样。

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

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

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

这里的目的是促进对 func(int) 添加更多调用,每次调用使用不同的参数,或者为 A 类型的对象放置更简单的某种构建器。

类似这样的事情:

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

这可以实现吗?

最佳答案

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

据我了解(尚未尝试)这是不可能的。

我想你必须明白什么意思:

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 中的私有(private)方法,那么你当然不能这样使用它。

解决的方法很简单,就是让方法的可见性受到保护(或更高)。

关于Java : Is it possible to access private static method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15082339/

相关文章:

java - 从 Aspose.slide java 替换图像时出错

java - SWT JFace如何在moveBelow()后重绘

java - equals() 的实现 : compare against implemented interface or implementing class?

java - 更改另一个类中静态变量的值

java - 将字符串转换为 int 数组

java - 使用 Step Builder 模式创建包含实例变量(列表)的复杂对象

ruby - 如何使用 Nokogiri 访问属性

java - 覆盖 lombok 构建器并更改值类型

具有构建器模式的 Java 泛型类型 DSL

c# - 构建器模式 VS 我的实现