Create the below Class ..
public class JavaClassSpy implements Serializable{
public JavaClassSpy(){
}
public JavaClassSpy(int a, float f) {
super();
this.a = a;
this.f = f;
}
private int a;
private float f;
public boolean b = true;
public String name = "Alice";
public List<Integer> list;
public void printHello(){
System.out.println("Hello!!");
System.out.println("a :" + this.a);
System.out.println("f :"+ this.f);
System.out.println("b :"+ this.b);
System.out.println("name :"+ this.name);
System.out.println("list :"+ this.list);
}
public static void main(String... args) {}
}
Write a program that prints the following:
- name of the class.
- modifiers of the class.
- package of the class.
- fields of the class (list the field names/data types/modifiers).
- list of all the private/public field names in the class.
- methods of the class (name and return type).
- interfaces implemented by the class (name).
- constructors.
- super class.
- Create an instance of the class.
- Set all field values in the new instance (with some values).
- Invoke all public methods using the new instance.
assignment10.JavaClassSpy
public
package assignment10
-----Fields-----
private int a
private float f
public boolean b
public String name
public List list
-----Methods-----
public static void main(class [Ljava.lang.String;)
public void printHello()
----Interface-----
interface java.io.Serializable
-----Constructors-----
public assignment10.JavaClassSpy()
public assignment10.JavaClassSpy(int, float)
SuperClass: class java.lang.Object
-----Invoking Methods-----
Hello!!
a :10
f :23.56
b :false
name :Shaeed
list :[0, 1, 2, 3]
Program:
import java.io.Serializable;
import java.lang.reflect.Field;
import java.util.List;
public class JavaClassSpy implements Serializable {
private int a;
private float f;
public boolean b = true;
public String name = "Alice";
public List<Integer> list;
public JavaClassSpy(){}
public JavaClassSpy(int a, float f){
this.a=a;
this.f=f;
}
public void printHello(){
System.out.println("Hello!!");
System.out.println("a :" + this.a);
System.out.println("f :"+ this.f);
System.out.println("b :"+ this.b);
System.out.println("name :"+ this.name);
System.out.println("list :"+ this.list);
}
public static void main(String[] args){
System.out.println("In main method of JavaClassSpy");
}
}
Test Class:
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
//Importing JavaSpy Class
import JavaClassSpy;
public class TestClass {
public static void main(String [] args) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchFieldException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException{
Class<JavaClassSpy> ref = JavaClassSpy.class;
System.out.println(ref.getName());
System.out.println(Modifier.toString(ref.getModifiers()));
System.out.println(ref.getPackage());
//Fields
Field[] fields = ref.getDeclaredFields();
System.out.println("\n-----Fields-----");
for(Field f : fields){
System.out.printf("%s %s %s\n",Modifier.toString(f.getModifiers()),f.getType().getSimpleName(),f.getName());
}
//Methods
Method[] methods = ref.getDeclaredMethods();
System.out.println("\n-----Methods-----");
for(Method m:methods){
System.out.printf("%s %s %s(",Modifier.toString(m.getModifiers()),m.getReturnType(), m.getName());
Class<?>[] par = m.getParameterTypes();
if(par.length>0){
System.out.print(par[0]);
for(int i=1;i<par.length-1;i++)
System.out.print(", "+par[i].toString());
if(par.length>1)
System.out.print(", "+par[par.length-1]);
}
System.out.println(")");
}
//Interface
Class<?>[] intrfc=ref.getInterfaces();
System.out.println("\n----Interface-----");
for(Class<?> s:intrfc)
System.out.println(s.toString());
//Constructors
Constructor<?>[] constr = ref.getDeclaredConstructors();
System.out.println("\n-----Constructors-----");
for(Constructor<?> con:constr){
System.out.printf("%s %s(",Modifier.toString(con.getModifiers()),con.getName());
Class<?>[] par = con.getParameterTypes();
if(par.length>0){
System.out.print(par[0]);
for(int i=1;i<par.length-1;i++)
System.out.print(", "+par[i]);
if(par.length>1)
System.out.print(", "+par[par.length-1]);
}
System.out.println(")");
}
//SuperClass
System.out.println("\nSuperClass: "+ref.getSuperclass());
//Instance of the class
Object obj = ref.newInstance();
//accessing field and setting values
Field[] fl = new Field[fields.length];
for(int i=0;i<fields.length;i++){
fl[i]=ref.getDeclaredField(fields[i].getName());
fl[i].setAccessible(true);
if(fields[i].getType().getSimpleName().equals("int"))
fl[i].set(obj, 10);
else if(fields[i].getType().getSimpleName().equals("String"))
fl[i].set(obj, "Shaeed");
else if(fields[i].getType().getSimpleName().equals("float"))
fl[i].set(obj, 23.56f);
else if(fields[i].getType().getSimpleName().equals("boolean"))
fl[i].set(obj, false);
else if(fields[i].getType().getSimpleName().equals("List")){
fl[i].set(obj, new ArrayList<Integer>());
List<Integer> ll = (List)fl[i].get(obj);
for(int j=0;j<i;j++){
ll.add(j);
}
}
}
//Calling methods
System.out.println("\n-----Invoking Methods-----");
System.out.println();
for(Method m:methods){
if(!(m.getName().equals("main"))){
Method mCall = ref.getDeclaredMethod(m.getName(),null);
mCall.invoke(obj);
}
}
}
}
No comments:
Post a Comment