Find method : Method « Reflection « Java

Java
1. 2D Graphics GUI
2. 3D
3. Advanced Graphics
4. Ant
5. Apache Common
6. Chart
7. Class
8. Collections Data Structure
9. Data Type
10. Database SQL JDBC
11. Design Pattern
12. Development Class
13. EJB3
14. Email
15. Event
16. File Input Output
17. Game
18. Generics
19. GWT
20. Hibernate
21. I18N
22. J2EE
23. J2ME
24. JDK 6
25. JNDI LDAP
26. JPA
27. JSP
28. JSTL
29. Language Basics
30. Network Protocol
31. PDF RTF
32. Reflection
33. Regular Expressions
34. Scripting
35. Security
36. Servlets
37. Spring
38. Swing Components
39. Swing JFC
40. SWT JFace Eclipse
41. Threads
42. Tiny Application
43. Velocity
44. Web Services SOA
45. XML
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java » Reflection » MethodScreenshots 
Find method
 
//
//$Id: IntrospectionUtil.java 1540 2007-01-19 12:24:10Z janb $
//Copyright 2006 Mort Bay Consulting Pty. Ltd.
//------------------------------------------------------------------------
//Licensed under the Apache License, Version 2.0 (the "License");
//you may not use this file except in compliance with the License.
//You may obtain a copy of the License at 
//http://www.apache.org/licenses/LICENSE-2.0
//Unless required by applicable law or agreed to in writing, software
//distributed under the License is distributed on an "AS IS" BASIS,
//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//See the License for the specific language governing permissions and
//limitations under the License.
//

import java.lang.reflect.Field;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.List;

public class IntrospectionUtil {
  public static Method findMethod(Class clazz, String methodName, Class[] args,
      boolean checkInheritance, boolean strictArgsthrows NoSuchMethodException {
    if (clazz == null)
      throw new NoSuchMethodException("No class");
    if (methodName == null || methodName.trim().equals(""))
      throw new NoSuchMethodException("No method name");

    Method method = null;
    Method[] methods = clazz.getDeclaredMethods();
    for (int i = 0; i < methods.length && method == null; i++) {
      if (methods[i].getName().equals(methodName)
          && checkParams(methods[i].getParameterTypes()(args == null new Class[] {} : args),
              strictArgs)) {
        method = methods[i];
      }

    }
    if (method != null) {
      return method;
    else if (checkInheritance)
      return findInheritedMethod(clazz.getPackage(), clazz.getSuperclass(), methodName, args,
          strictArgs);
    else
      throw new NoSuchMethodException("No such method " + methodName + " on class "
          + clazz.getName());

  }

  public static Field findField(Class clazz, String targetName, Class targetType,
      boolean checkInheritance, boolean strictTypethrows NoSuchFieldException {
    if (clazz == null)
      throw new NoSuchFieldException("No class");
    if (targetName == null)
      throw new NoSuchFieldException("No field name");

    try {
      Field field = clazz.getDeclaredField(targetName);
      if (strictType) {
        if (field.getType().equals(targetType))
          return field;
      else {
        if (field.getType().isAssignableFrom(targetType))
          return field;
      }
      if (checkInheritance) {
        return findInheritedField(clazz.getPackage(), clazz.getSuperclass(), targetName,
            targetType, strictType);
      else
        throw new NoSuchFieldException("No field with name " + targetName + " in class "
            + clazz.getName() " of type " + targetType);
    catch (NoSuchFieldException e) {
      return findInheritedField(clazz.getPackage(), clazz.getSuperclass(), targetName, targetType,
          strictType);
    }
  }

  public static boolean isInheritable(Package pack, Member member) {
    if (pack == null)
      return false;
    if (member == null)
      return false;

    int modifiers = member.getModifiers();
    if (Modifier.isPublic(modifiers))
      return true;
    if (Modifier.isProtected(modifiers))
      return true;
    if (!Modifier.isPrivate(modifiers&& pack.equals(member.getDeclaringClass().getPackage()))
      return true;

    return false;
  }

  public static boolean checkParams(Class[] formalParams, Class[] actualParams, boolean strict) {
    if (formalParams == null && actualParams == null)
      return true;
    if (formalParams == null && actualParams != null)
      return false;
    if (formalParams != null && actualParams == null)
      return false;

    if (formalParams.length != actualParams.length)
      return false;

    if (formalParams.length == 0)
      return true;

    int j = 0;
    if (strict) {
      while (j < formalParams.length && formalParams[j].equals(actualParams[j]))
        j++;
    else {
      while ((j < formalParams.length&& (formalParams[j].isAssignableFrom(actualParams[j]))) {
        j++;
      }
    }

    if (j != formalParams.length) {
      return false;
    }

    return true;
  }

  public static boolean isSameSignature(Method methodA, Method methodB) {
    if (methodA == null)
      return false;
    if (methodB == null)
      return false;

    List parameterTypesA = Arrays.asList(methodA.getParameterTypes());
    List parameterTypesB = Arrays.asList(methodB.getParameterTypes());

    if (methodA.getName().equals(methodB.getName()) && parameterTypesA.containsAll(parameterTypesB))
      return true;

    return false;
  }

  public static boolean isTypeCompatible(Class formalType, Class actualType, boolean strict) {
    if (formalType == null && actualType != null)
      return false;
    if (formalType != null && actualType == null)
      return false;
    if (formalType == null && actualType == null)
      return true;

    if (strict)
      return formalType.equals(actualType);
    else
      return formalType.isAssignableFrom(actualType);
  }

  public static boolean containsSameMethodSignature(Method method, Class c, boolean checkPackage) {
    if (checkPackage) {
      if (!c.getPackage().equals(method.getDeclaringClass().getPackage()))
        return false;
    }

    boolean samesig = false;
    Method[] methods = c.getDeclaredMethods();
    for (int i = 0; i < methods.length && !samesig; i++) {
      if (IntrospectionUtil.isSameSignature(method, methods[i]))
        samesig = true;
    }
    return samesig;
  }

  public static boolean containsSameFieldName(Field field, Class c, boolean checkPackage) {
    if (checkPackage) {
      if (!c.getPackage().equals(field.getDeclaringClass().getPackage()))
        return false;
    }

    boolean sameName = false;
    Field[] fields = c.getDeclaredFields();
    for (int i = 0; i < fields.length && !sameName; i++) {
      if (fields[i].getName().equals(field.getName()))
        sameName = true;
    }
    return sameName;
  }

  protected static Method findInheritedMethod(Package pack, Class clazz, String methodName,
      Class[] args, boolean strictArgsthrows NoSuchMethodException {
    if (clazz == null)
      throw new NoSuchMethodException("No class");
    if (methodName == null)
      throw new NoSuchMethodException("No method name");

    Method method = null;
    Method[] methods = clazz.getDeclaredMethods();
    for (int i = 0; i < methods.length && method == null; i++) {
      if (methods[i].getName().equals(methodName&& isInheritable(pack, methods[i])
          && checkParams(methods[i].getParameterTypes(), args, strictArgs))
        method = methods[i];
    }
    if (method != null) {
      return method;
    else
      return findInheritedMethod(clazz.getPackage(), clazz.getSuperclass(), methodName, args,
          strictArgs);
  }

  protected static Field findInheritedField(Package pack, Class clazz, String fieldName,
      Class fieldType, boolean strictTypethrows NoSuchFieldException {
    if (clazz == null)
      throw new NoSuchFieldException("No class");
    if (fieldName == null)
      throw new NoSuchFieldException("No field name");
    try {
      Field field = clazz.getDeclaredField(fieldName);
      if (isInheritable(pack, field&& isTypeCompatible(fieldType, field.getType(), strictType))
        return field;
      else
        return findInheritedField(clazz.getPackage(), clazz.getSuperclass(), fieldName, fieldType,
            strictType);
    catch (NoSuchFieldException e) {
      return findInheritedField(clazz.getPackage(), clazz.getSuperclass(), fieldName, fieldType,
          strictType);
    }
  }

}

   
  
Related examples in the same category
1. Method Reflection
2. Load a method on the fly
3. Demonstrates how to get specific method information
4. Class Reflection: show methodsClass Reflection: show methods
5. Object Reflection: invoke methodsObject Reflection: invoke methods
6. To get the calling method
7. Get the class name in a static method
8. Call a method dynamically (Reflection)
9. Call a class method with 2 arguments
10. Using reflection to show all the methods of a class,
11. Invoke method through Java Reflection APIInvoke method through Java Reflection API
12. Get a given method, and invoke it
13. Show loading a class and finding and calling its Main methodShow loading a class and finding and calling its Main method
14. Demonstrates dynamic usage of methods
15. Demonstration of various method invocation issues
16. An invocation handler that counts the number of calls for all methods in the target class.
17. Method modifiers: isSynthetic(), m.isVarArgs(), m.isBridge()
18. Call private method
19. Get the methods of a class object
20. Invoke a method using Method class
21. The next example calls a class method with 2 arguments:
22. Getting the Methods of a Class Object: By obtaining a list of all declared methods
23. Getting the Methods of a Class Object: By obtaining a list of all public methods, both declared and inherited.
24. Getting the Methods of a Class Object: By obtaining a particular Method object.
25. Get the current method name
26. Get the current method name With JDK1.5
27. Get all declared methods from a class
28. Make methods that have unspecified number of parameters:pass an array of Objects
29. Get all methods including the inherited method. Using the getMethods(), we can only access public methods.
30. Fetches all methods of all access types from the supplied class and super classes
31. Find a Method on the supplied class with the supplied name and no parameters
32. Find a Method on the supplied class with the supplied name and parameter types
33. Checks whether the specified class contains a method matching the specified name.
34. Call a member function to get the value
35. Call a method of an object
36. Call a static method of a class with reflection
37. Returns method with the specified name
38. Invokes a method, masking with a runtime exception all the exceptions.
39. Sorts methods according to their name, number of parameters, and parameter types.
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.