2013-06-26 26 views
-4
class B { 

    private B() {} 

    public void test() { 
     System.out.println("hello"); 
    } 
} 

public class A { 
    public static void main(String[] args) {} 
} 
+0

问题是什么?添加一些问题的文本表示并设置你的代码的格式,那么这里的专家肯定会提供答案 –

+0

你需要B的构造函数的“私有”可见性吗? –

+0

请告诉我,如果有任何方法在相同的代码中调用该方法。 – aaa1

回答

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); 
+1

'B'的构造函数是私有的! – NINCOMPOOP

+1

B()是私人的 – Parth

+0

我也回答了。 – darijan

0

你在这里创造一个私有的构造,这意味着你cna't B级制作外isntantiate 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(); 
    } 

    } 
+0

他不能使用Reflection调用该方法吗? – NINCOMPOOP

+0

新白痴,抱歉不知道我们可以用反射来做到这一点。 –

+0

我之前有过seens darijan的回答,他在我发布之后编辑了'private'构造函数,我只是添加了'private'部分,并且信誉已经提供给darijan进行实例化。 –

0

,如果你想访问你的测试方法,你不能实例化一个ClasB,因为它有私有的构造函数将构造函数更改为public。如果这不是您的要求
1.如果您的测试方法定义是不是一个对象取决于您可以访问使用reflection
或者
2.方法,可以使静态方法和访问,通过类名

1

由于test是一个实例方法,所以您需要使用类B的对象调用该方法。您已将类B的构造函数声明为private,因此您将无法使用new运算符在类B之外创建B对象。您可以使用反射:

Constructor<B> constructor=B.class.getDeclaredConstructor(); 
constructor.setAccessible(true); 
B b = constructor.newInstance(); 
b.test(); 
+0

这是一个新的东西要学习:)谢谢你:) upvote from me –