2017-06-03 2 views
0

Zugriff auf parametrisierten Konstruktor mit Reflection API. Ich habe versucht, es mit der folgenden Klasse zu tun, aber es wirft einen Fehler auf.Parametrisierter privater Konstruktor mit Reflection

//Primary class 
    package com.deepak; 

    public class A { 
    private String name; 

    private A(String name) { 
      this.name = name; 
     } 

    } 

//Exact class 

    class MethodCall { 

    Class first = Class.forName("com.deepak.A"); 
      Constructor constructor1 = first.getDeclaredConstructor(); 
      constructor1.setAccessible(true); 
      A a= (A) constructor1.newInstance("deepak"); 
      System.out.println(a); 


    } 

Fehlermeldung:

Exception in thread "main" java.lang.NoSuchMethodException: com.deepak.A.<init>() 
    at java.lang.Class.getConstructor0(Class.java:3082) 
    at java.lang.Class.getDeclaredConstructor(Class.java:2178) 
    at com.deepak.MethodCall.main(MethodCall.java:44) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 
+0

Randbemerkung: Sie sollten mit rohen Typen vermeiden. –

Antwort

3

Diese Exception Mittel in relection es nicht constructor ohne param, da Klasse finden A nur eine haben constructor mit Stringparam akzeptieren.

so sollten Sie mit Ihrem constructorparameter Klasse getConstructor, wie:

Constructor constructor1 = first.getConstructor(String.class); 
+0

Es hat nicht funktioniert –

0

Sie folgenden Code verwenden, könnte zu bekommen, was Sie brauchen:

public static void main(String[] args) throws Exception { 
    Class first = Class.forName("com.deepak.A"); 
    Constructor[] declaredConstructors = first.getDeclaredConstructors(); 
    Constructor constructor1 = declaredConstructors[0]; 
    constructor1.setAccessible(true); 
    A a= (A) constructor1.newInstance("deepak"); 
    System.out.println(a); 

} 
+0

Es hat auch nicht funktioniert –

+0

Ich habe es getestet, damit ich garantieren kann funktioniert –

+0

Hallo @nikita Es funktioniert nur, wenn ich Konstrukteure in meiner Klasse zusammen mit nichts haben. Wenn ich jedoch Konstruktoren mit normalen Methoden habe, habe ich nicht gearbeitet. –

Verwandte Themen