Tengo una clase que se parece a esto:

public class UploadBean {


    protected UploadBean(Map<String,?> map){ 
        //do nothing.
    }
}

A utilizar la reflexión y crear un objeto mediante la invocación del constructor correspondiente, escribí el código de la siguiente manera:

Class<?> parTypes[] = new Class<?>[1];
parTypes[0] = Map.class;
Constructor ct = format.getMappingBean().getConstructor(parTypes);
Object[] argList  = new Object[1];
argList[0] = map;
Object retObj = ct.newInstance(argList);

Este código produce un error en tiempo de ejecución con «No hay Tal Método de Excepción».
Ahora, ¿cómo puedo configurar el param escriba correctamente?! tal que el genérico mapa argumento en el constructor se identifica?

¿Qué es el «formato» ?
El formato es una aplicación de la presente: interfaz pública FormatFactory { public Mapa<String, Clase> getFormat(); public Class<? se extiende UploadBean> getMappingBean(); }

OriginalEl autor Jay | 2009-06-02

3 Comentarios

  1. 7

    El constructor está protegido, si la haces pública o uso getDeclaredConstructor en lugar de getConstructor se debe trabajar.

    (Tendrás que usar setAccessible si usted está tratando de llamar a esto desde un lugar que normalmente no tendrían acceso.)

    EDIT: he Aquí una prueba para mostrar que funcione bien:

    import java.lang.reflect.*;
    import java.util.*;
    
    public class UploadBean {
    
        //"throws Exception" just for simplicity. Not nice normally!
        public static void main(String[] args) throws Exception {
            Class<?> parTypes[] = new Class<?>[1];
            parTypes[0] = Map.class;
            Constructor ct = UploadBean.class.getDeclaredConstructor(parTypes);
            Object[] argList  = new Object[1];
            argList[0] = null;
            Object retObj = ct.newInstance(argList);
        }
    
        protected UploadBean(Map<String,?> map){ 
            //do nothing.
        }
    }
    O uso getDeclaredConstructor(), como acabo de encontrar (pero demasiado tarde!).
    no funciona lanza esta excepción nuevo: java.lang.NoSuchMethodException: de prueba.fileupload.XYZUploadBean.<init>(java.util.Mapa)
    Sería getDeclaredConstructor (), a continuación, requieren setAccessible(verdadero)? En mis pruebas no se, pero yo no intente separar main() de la UploadBean.
    Por favor proporcione una breve pero completa programa a continuación. Si usted está usando la clase de derecho y tiene el derecho constructor, debe estar bien. Funciona en mis pruebas.
    En particular, ¿ XYZUploadBean tiene el derecho constructor? Has demostrado UploadBean, pero no XYZUploadBean…

    OriginalEl autor Jon Skeet

  2. 1

    Los genéricos de la información no está disponible en tiempo de ejecución, es sólo para el análisis estático, por lo tanto, hacer como si los genéricos no existe.

    Sí, realmente el error no tiene nada que ver con los genéricos; esto es simplemente una reflexión de la pregunta. (Pero es bueno aclarar este punto.)
    de acuerdo.

    OriginalEl autor fortran

  3. 0

    Creo que usted necesita llamar a

    ct.setAccessible(true)

    La setAccessible método permite reemplazar los métodos de acceso.

    OriginalEl autor Rob Di Marco

Dejar respuesta

Please enter your comment!
Please enter your name here