package reflection.constructors;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
/**
* Test class with constructors, for the purpose of testing constructor invocation.
* <p>
* Constructors in this class have some behavior (which is changed in a reloaded class), so that we can see when they are
* being called.
*
* @author kdvolder
*/
public class ClassForNewInstance {
private boolean b;
private String s;
private int i;
private double d;
public ClassForNewInstance() {
System.out.println("no args");
}
ClassForNewInstance(String x) {
this.s = x;
System.out.println("string "+x);
}
protected ClassForNewInstance(int x) {
this.i = x;
System.out.println("int "+x);
}
@SuppressWarnings("unused")
private ClassForNewInstance(boolean x) {
this.b = x;
System.out.println("bool "+x);
}
//Becomes public
@SuppressWarnings("unused")
private ClassForNewInstance(int x, String y) {
this.i = x; this.s = y;
System.out.println("int String "+x+" "+y);
}
//Becomes private
public ClassForNewInstance(double x) {
this.d = x;
System.out.println("double "+x);
}
// Will be deleted
public ClassForNewInstance(char c, char d) {
s = c+","+d;
}
@Override
public String toString() {
// The value of toString is used by the test to check expected result... so
return "001{ "+b+", "+s+","+i+","+d+"}";
}
/// We also use this class itself as an "invoker" for testing, so that we have some cases where it *is* allowed
// to call private methods etc. without setAccessible!
public static Object callNewInstance(Constructor<?> thiz, Object[] a0)
throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException
{
return thiz.newInstance(a0);
}
}