Wednesday 15 February 2012

reflection - Instantiating a Java local class reflectively -


In Java, is there a way or a consolation? Your test class

Here is the illustration hack:

  package com.example.localclass; Import org.junit.Test; Public Class LocalClassInstantiationTest {@Test Public Zero TestInstantiateLocalClassReflectively () {println ("About to Define Local Class"); Class Local Class {Zero Print () {System.out.println ("Hello World"); }} System.out.println ("-------------------- Direct installation ---------------------- ----- "); Local Class Local Class Instance; LocalClassInstance = new localclus (); LocalClassInstance.print (); System.out.println ("-------------------- Reflective Urgency --------------------" ); Class & lt; LocalClass & gt; LocalClazz = Local Class. Class; System.out.println ("Local class name:" + localClazz.getName ()); System.out.println ("Local Class Canonical Name:" + localClazz.getCanonicalName ()); System.out.println ("Local class constructor array length:" + localClazz.getConstructors (). Length); System.out.println ("About Making Reflected Local Class Installation"); Try {localClassInstance = localClazz.newInstance (); LocalClassInstance.print (); } Hold (InstantiationException | IllegalAccessException e) {e.printStackTrace (); }}}   

When I run it, I get the following result:

  About defining a local class ----- ----- ---------- Direct Institution ------------------------ Hello World ------- ----- -------- Reflective Instantiation -------------------- Local class names: com.example.localclass.LocalClassInstantiationTest $ 1LocalClass Local Class Canonical Name: Null Local Class Constructors Array Length: 0 Local class examples to create about java.lang.In StantiationException: com.example.localclass.LocalClassInstantiationTest $ 1LocalClass at java.lang.Class.newInstance0 (Class.java357) at java.lang.Class The newInstance com.example.localclass.LocalClassInstantiationTest.testInstantiateLocalClassReflectively (Class.java:325) (LocalClassInstantiationTest.java:32)    

In your case, the problem is that there is no empty creator for your class. New Instance () assumes that you have one and fails if you do not.

If you run it in a static method like main, then you do not get this error. In

The reason for this is that they give you a non-static class and implicitly requires a reference to its outer class LocalClassInstantiationTest you use it or not.

You can try this instead.

  System.out.println ("Local class constructor array length:" + localclass.getclard conststructor (. Length); System.out.println ("About Making Reflected Local Class Installation"); Try {localClassInstance = localClazz.getDeclaredConstructor (LocalClassInstantiationTest.class). New instance (this); LocalClassInstance.print (); } Hold (NoSuchMethodException | InvocationTargetException | instantiationException | Invalid AccessException e) {e.printStackTrace (); }   

and print your program

  --------------- about how to define local classes ---- -No immediate ------------------------ Hello world ----------------- --- reflective urgency -------------------- local Class name: local Class Instasteshntest $ 1 local Class local Class canonical name: free local class constructor array length: 1 to reflect the local class installation Hello World    

No comments:

Post a Comment