Person.java
import java.util.Calendar;
public class Person
{
public String publicString1;
public String publicString2;
private String fname;
private String lname;
protected int birthYear;
String address;
String city;
String state;
String zipCode;
public Person(String fname, String lname) {
super();
this.fname = fname;
this.lname = lname;
}
public Person(String fname, String lname, int birthYear) {
super();
this.fname = fname;
this.lname = lname;
this.birthYear = birthYear;
}
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public int getBirthYear() {
return birthYear;
}
public void setBirthYear(int birthYear) {
this.birthYear = birthYear;
}
public int calculateAge()
{
Calendar calendar = Calendar.getInstance();
return calendar.get(Calendar.YEAR) - birthYear;
}
public void setAddress(String address, String city, String state, String zipCode)
{
this.address = address;
this.city = city;
this.state = state;
this.zipCode = zipCode;
}
public String toString()
{
return fname + " " + lname;
}
}
Shape.java
public class Shape <T, K> {
T left;
T right;
K top;
K bottom;
public Shape(T left, T right, K top, K bottom) {
this.left = left;
this.right = right;
this.top = top;
this.bottom = bottom;
}
}
Square.java
public class Square extends Shape {
public Square(T left, T right, K bottom, K top) {
super(left, right, top, bottom);
}
}
Rectangle.java
public class Rectangle extends Shape<Integer, Integer>{
public Rectangle(Integer left, Integer right, Integer bottom, Integer top) {
super(left, right, top, bottom);
}
}
Reflection.java
package com.tutorial;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
public class Reflection {
static void AnalyzePerson()
{
try {
Class<?> c = Class.forName("com.tutorial.Person");
//print out all functions in class Person
Method [] m = c.getDeclaredMethods();
for(int i = 0; i < m.length; i++)
{
System.out.println("Method Name: " + m[i].getName());
System.out.println("Return Type: " + m[i].getReturnType());
Class<?>[] t = m[i].getParameterTypes();
for(int j = 0; j < t.length; j++)
System.out.println("Parameters: " + t[j].getName());
System.out.println();
}
//print out all public field in class Person
Field [] f = c.getDeclaredFields();
for(int i = 0; i < f.length; i++)
System.out.println("Fields: " + Modifier.toString(f[i].getModifiers()) + " " + f[i].getName());
System.out.println();
//calls constructor
Class <?> parameterType[] = {String.class, String.class};
Constructor<?> ct = c.getConstructor(parameterType);
Object argList[] = {"John", "Smith"};
Object newPerson = ct.newInstance(argList);
System.out.println(((Person)newPerson).toString());
//sets birthday
Class <?> parameterType1[] = {Integer.TYPE};
Method m1 = c.getMethod("setBirthYear", parameterType1);
Object argList1[] = {new Integer(1985)};
m1.invoke(newPerson, argList1);
//calculate age
Method m2 = c.getMethod("calculateAge");
Object ret = m2.invoke(newPerson);
System.out.println("Age: " + ret);
System.out.println();
//set field publicString1
Field field = c.getField("publicString1");
field.set(newPerson, "Alfred");
Object obj = field.get(newPerson);
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
static void AnalyzeSquare()
{
System.out.println("----------------------------------------");
try {
Class <?> c = Class.forName("com.tutorial.Square");
//get base class
Class <?>superc = c.getSuperclass();
System.out.println("Base Class: " + superc.getName());
//get parameters for square
Square<Integer, Integer> s = new Square<Integer, Integer>(1, 1, 100, 100);
ParameterizedType pt = (ParameterizedType)s.getClass().getGenericSuperclass();
System.out.println(pt);
//get parameters for rectangle
Rectangle r = new Rectangle(2, 2, 100, 300);
pt = (ParameterizedType)r.getClass().getGenericSuperclass();
System.out.println(pt);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
AnalyzePerson();
AnalyzeSquare();
}
}