001 /*
002 * LAPIS lightweight structured text processing system
003 *
004 * Copyright (C) 1998-2002 Carnegie Mellon University,
005 * Copyright (C) 2003 Massachusetts Institute of Technology.
006 * All rights reserved.
007 *
008 * This library is free software; you can redistribute it
009 * and/or modify it under the terms of the GNU General
010 * Public License as published by the Free Software
011 * Foundation, version 2.
012 *
013 * LAPIS homepage: http://graphics.lcs.mit.edu/lapis/
014 */
015
016
017 package lapisx.util;
018
019 import java.lang.reflect.*;
020
021 /**
022 * Handy reflection routines.
023 */
024 public abstract class Reflect {
025 /**
026 * Create a new instance of a class by calling a constructor with
027 * arguments.
028 */
029 public static Object newInstance (String className,
030 Class[] signature,
031 Object[] args)
032 throws Exception {
033
034 Class cls = Class.forName (className);
035 Constructor constructor = cls.getConstructor (signature);
036 return constructor.newInstance (args);
037 }
038
039 /**
040 * Call a method of an object.
041 */
042 public static Object callMethod (Object obj,
043 String methodName,
044 Class[] signature,
045 Object[] args)
046 throws Exception {
047
048 Class cls = obj.getClass ();
049 Method method = cls.getMethod (methodName, signature);
050 return method.invoke (obj, args);
051 }
052
053 /**
054 * Call a static method of a class.
055 */
056 public static Object callStaticMethod (String className,
057 String methodName,
058 Class[] signature,
059 Object[] args)
060 throws Exception {
061
062 Class cls = Class.forName (className);
063 Method method = cls.getMethod (methodName, signature);
064 return method.invoke (cls, args);
065 }
066
067 /**
068 * Fetch a static field from a class.
069 */
070 public static Object getStaticField (String className,
071 String fieldName)
072 throws Exception {
073
074 Class cls = Class.forName (className);
075 Field fld = cls.getField (fieldName);
076
077 if (!Modifier.isStatic (fld.getModifiers ()))
078 throw new NoSuchFieldException ();
079
080 return fld.get (null);
081 }
082 }