Feladatok:
public @interface MyAnnot { }
@MyAnnot
public class A {
@MyAnnot
private int a;
@MyAnnot()
public int getA() {
return a;
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyStringAnnotation {
public String param();
}
@MyStringAnnotation(param="test")
public class B {
}
public class B {
@MyStringAnnotation(param="test")
public void f() {
}
}
Feladatok:
public class RentCar {
private int rate;
private String type;
public int price;
public RentCar(int length) {
if (length < 455) {
type = "small";
rate = 35;
} else if ((length >= 455) && (length < 495)) {
type = "mid-sized";
rate = 45;
} else if (length >= 495) {
type = "large";
rate = 55;
}
}
public int getRate() {
return rate;
}
public String getType() {
return type;
}
public void setRate(int rate) {
this.rate = rate;
}
public void setType(String type) {
this.type = type;
}
public void computeRentalCost(int numDays) {
price = numDays * rate;
System.out.println("The cost of your rental car is " + price + " euros");
}
}
Class<RentCar> rental = RentCar.class;
String rentalClassPackage = rental.getName();
System.out.println("Class Name is: " + rentalClassPackage);
String rentalClassNoPackage = rental.getSimpleName();
System.out.println("Class Name without package is: " + rentalClassNoPackage);
Package rentalPackage = rental.getPackage();
System.out.println("Package Name is: " + rentalPackage);
import java.lang.reflect.Constructor;
Constructor<?>[] constructors = rental.getConstructors();
System.out.println("Constructors are: " + Arrays.toString(constructors));
Constructor<RentCar> constructor = rental.getConstructor(Integer.TYPE);
RentCar rent = constructor.newInstance(455);
import java.lang.reflect.Method;
Method[] allmethods = rental.getMethods();
System.out.println("Methods are: " + Arrays.toString(allmethods));
for (Method method : allmethods) {
System.out.println("method = " + method.getName());
}
Method[] declaredMethods = rental.getDeclaredMethods();
System.out.println("Declared Methods are: "
+ Arrays.toString(declaredMethods));
for (Method dmethod : declaredMethods) {
System.out.println("method = " + dmethod.getName());
}
Method oneMethod = rental.getMethod("computeRentalCost", Integer.TYPE );
System.out.println("Method is: " + oneMethod);
oneMethod.invoke(rent, 4);
Class<?>[] parameterTypes = oneMethod.getParameterTypes();
System.out.println("Parameter types of computeRentalCost() are: "
+ Arrays.toString(parameterTypes));
Class<?> returnType = oneMethod.getReturnType();
System.out.println("Return type is: " + returnType);
import java.lang.reflect.Field;
Field[] fields = rental.getFields();
System.out.println("Public Fields are: ");
for (Field oneField : fields) {
Field field = rental.getField(oneField.getName());
String fieldname = field.getName();
System.out.println("Fieldname is: " + fieldname);
Object fieldType = field.getType();
System.out.println("Type of field " + fieldname + " is: " + fieldType);
Object value = field.get(rent);
System.out.println("Value of field " + fieldname + " is: " + value);
}
Field privateField = RentCar.class.getDeclaredField("type");
String name = privateField.getName();
System.out.println("One private Fieldname is: " + name);
privateField.setAccessible(true);
String fieldValue = (String) privateField.get(rent);
System.out.println("fieldValue = " + fieldValue);
Összetett feladat: