class B {
private B() {}
public void test() {
System.out.println("hello");
}
}
public class A {
public static void main(String[] args) {}
}
答案 0 :(得分:1)
由于test
是一个实例方法,因此您需要使用类B
的对象来调用该方法。您已将类B
的构造函数声明为私有,因此您将无法使用B
运算符在类B
之外创建new
的对象。您可以使用Reflection:
Constructor<B> constructor=B.class.getDeclaredConstructor();
constructor.setAccessible(true);
B b = constructor.newInstance();
b.test();
答案 1 :(得分:0)
选项1(需要更改类构造函数签名):创建类B
的构造函数,可访问,即不 private
。然后,创建B
的实例并调用方法:
public static void main(String[] args) {
B b = new B();
b.test();
}
选项2(需要更改方法签名):制作test()
方法static
:
public static void test() {
System.out.println("hello");
}
然后你可以在没有事先实例化的情况下调用:
public static void main(String[] args) {
B.test();
}
选项3(无需更改代码):使用反射:
method = B.getClass().getDeclaredMethod("test");
method.setAccessible(true);
method.invoke(object);
答案 2 :(得分:0)
你在这里创建一个私有构造函数,这意味着你不能在类B之外实例化类B.使它public
然后按照darijan回答
class B {
public B() {}
public void test() {
System.out.println("hello");
}
}
public class A {
public static void main(String[] args) {
B b = new B();
b.test();
}
}
答案 3 :(得分:0)
如果要访问必须将构造函数更改为public的测试方法,则无法实例化ClasB,因为它具有私有构造函数。如果那不是你的要求
1.您可以使用reflection来访问该方法
或
2.如果您的测试方法定义不依赖于对象,则可以使该方法为静态,并按类名