// reflection/toys/ToyTest.java // (c)2021 MindView LLC: see Copyright.txt // We make no guarantees that this code is fit for any purpose. // Visit http://OnJava8.com for more book information. // Testing class Class // {java reflection.toys.ToyTest} package reflection.toys; import java.lang.reflect.InvocationTargetException; interface HasBatteries {} interface Waterproof {} interface Shoots {} class Toy { // Comment out the following zero-argument // constructor to see NoSuchMethodError public Toy() {} public Toy(int i) {} } class FancyToy extends Toy implements HasBatteries, Waterproof, Shoots { public FancyToy() { super(1); } } public class ToyTest { static void printInfo(Class cc) { System.out.println("Class name: " + cc.getName() + " is interface? [" + cc.isInterface() + "]"); System.out.println( "Simple name: " + cc.getSimpleName()); System.out.println( "Canonical name : " + cc.getCanonicalName()); } @SuppressWarnings("deprecation") public static void main(String[] args) { Class c = null; try { c = Class.forName("reflection.toys.FancyToy"); } catch(ClassNotFoundException e) { System.out.println("Can't find FancyToy"); System.exit(1); } printInfo(c); for(Class face : c.getInterfaces()) printInfo(face); Class up = c.getSuperclass(); Object obj = null; try { // Requires public zero-argument constructor: obj = up.newInstance(); } catch(Exception e) { throw new RuntimeException("Cannot instantiate"); } printInfo(obj.getClass()); } } /* Output: Class name: reflection.toys.FancyToy is interface? [false] Simple name: FancyToy Canonical name : reflection.toys.FancyToy Class name: reflection.toys.HasBatteries is interface? [true] Simple name: HasBatteries Canonical name : reflection.toys.HasBatteries Class name: reflection.toys.Waterproof is interface? [true] Simple name: Waterproof Canonical name : reflection.toys.Waterproof Class name: reflection.toys.Shoots is interface? [true] Simple name: Shoots Canonical name : reflection.toys.Shoots Class name: reflection.toys.Toy is interface? [false] Simple name: Toy Canonical name : reflection.toys.Toy */