get Generic Parameter Types from Constructor : Generic « Reflection « Java






get Generic Parameter Types from Constructor

     
/*
 * Copyright (c) 1995 - 2008 Sun Microsystems, Inc.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

import static java.lang.System.out;

import java.lang.reflect.Constructor;
import java.lang.reflect.Type;

public class ConstructorSift {
  public static void main(String... args) {
    try {
      Class<?> cArg = Class.forName(args[1]);

      Class<?> c = Class.forName(args[0]);
      Constructor[] allConstructors = c.getDeclaredConstructors();
      for (Constructor ctor : allConstructors) {
        Class<?>[] pType = ctor.getParameterTypes();
        for (int i = 0; i < pType.length; i++) {
          if (pType[i].equals(cArg)) {
            out.format("%s%n", ctor.toGenericString());

            Type[] gpType = ctor.getGenericParameterTypes();
            for (int j = 0; j < gpType.length; j++) {
              char ch = (pType[j].equals(cArg) ? '*' : ' ');
              out.format("%7c%s[%d]: %s%n", ch, "GenericParameterType", j,
                  gpType[j]);
            }
            break;
          }
        }
      }

      // production code should handle this exception more gracefully
    } catch (ClassNotFoundException x) {
      x.printStackTrace();
    }
  }
}

   
    
    
    
    
  








Related examples in the same category

1.Get Generic Super class
2.Generic Class reflection
3.Get field type and generic type by field name
4.get Return Type and get Generic Return Type
5.get Exception Types and get Generic Exception Types
6.get Parameter Types and get Generic ParameterTypes
7.Generic method reflection
8.Class Declaration Spy
9.All information about a class
10.Get all implemented generic interfaces
11.If right-hand side type may be assigned to the left-hand side type following the Java generics rules.
12.Get all interface and object classes that are generalizations of the provided class
13.A wrapper around reflection to resolve generics.
14.Get Generic Type
15.Get Parameterized Type
16.Locates generic declaration by index on a class.