-
Bug
-
Resolution: Not an Issue
-
P4
-
None
-
7
-
x86
-
windows_7
FULL PRODUCT VERSION :
A DESCRIPTION OF THE PROBLEM :
Class.newInstance() give InstantiationException where it should create object for inner class.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Create Outer class
2. Inner class inside Outer.
3. Create test() method, in this method as below :
public class Outer {
public void test() {
ObjCreator it = new ObjCreator();
Inner obj = it.start(Inner.class);
System.out.println(obj);
}
public class Inner {
public Inner() {
System.out.println("Initializing");
}
}
}
3. Create ObjCreator class as below:
public class ObjCreator {
public <T> T start(Class<T> clazz) {
T newObj = null;
try {
newObj = clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return newObj;
}
}
4. Create Main Class as below :
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Outer outer = new Outer();
outer.test();
}
}
5. Run the main program.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Should create object of class Inner when Outer class is already created
ACTUAL -
null
java.lang.InstantiationException: model.Outer$Inner
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at test.ObjCreator.start(ObjCreator.java:8)
at model.Outer.test(Outer.java:10)
at main.Main.main(Main.java:12)
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.InstantiationException: model.Outer$Inner
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at test.ObjCreator.start(ObjCreator.java:8)
at model.Outer.test(Outer.java:10)
at main.Main.main(Main.java:12)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package model;
import test.ObjCreator;
public class Outer {
public void test() {
ObjCreator it = new ObjCreator();
Inner obj = it.start(Inner.class);
System.out.println(obj);
}
public class Inner {
public Inner() {
System.out.println("Initializing");
}
}
}
package test;
public class ObjCreator {
public <T> T start(Class<T> clazz) {
T newObj = null;
try {
newObj = clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return newObj;
}
}
package main;
import model.Outer;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Outer outer = new Outer();
outer.test();
}
}
---------- END SOURCE ----------
SUPPORT :
YES
A DESCRIPTION OF THE PROBLEM :
Class.newInstance() give InstantiationException where it should create object for inner class.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
1. Create Outer class
2. Inner class inside Outer.
3. Create test() method, in this method as below :
public class Outer {
public void test() {
ObjCreator it = new ObjCreator();
Inner obj = it.start(Inner.class);
System.out.println(obj);
}
public class Inner {
public Inner() {
System.out.println("Initializing");
}
}
}
3. Create ObjCreator class as below:
public class ObjCreator {
public <T> T start(Class<T> clazz) {
T newObj = null;
try {
newObj = clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return newObj;
}
}
4. Create Main Class as below :
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Outer outer = new Outer();
outer.test();
}
}
5. Run the main program.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Should create object of class Inner when Outer class is already created
ACTUAL -
null
java.lang.InstantiationException: model.Outer$Inner
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at test.ObjCreator.start(ObjCreator.java:8)
at model.Outer.test(Outer.java:10)
at main.Main.main(Main.java:12)
ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.InstantiationException: model.Outer$Inner
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at test.ObjCreator.start(ObjCreator.java:8)
at model.Outer.test(Outer.java:10)
at main.Main.main(Main.java:12)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
package model;
import test.ObjCreator;
public class Outer {
public void test() {
ObjCreator it = new ObjCreator();
Inner obj = it.start(Inner.class);
System.out.println(obj);
}
public class Inner {
public Inner() {
System.out.println("Initializing");
}
}
}
package test;
public class ObjCreator {
public <T> T start(Class<T> clazz) {
T newObj = null;
try {
newObj = clazz.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
return newObj;
}
}
package main;
import model.Outer;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
Outer outer = new Outer();
outer.test();
}
}
---------- END SOURCE ----------
SUPPORT :
YES