2015-01-07 8 views

risposta

11

è possibile ottenere tutte le Constructor s e controllare il loro numero di parametri, fermandosi quando si trova uno che ha 0.

private boolean hasParameterlessPublicConstructor(Class<?> clazz) { 
    for (Constructor<?> constructor : clazz.getConstructors()) { 
     // In Java 7-, use getParameterTypes and check the length of the array returned 
     if (constructor.getParameterCount() == 0) { 
      return true; 
     } 
    } 
    return false; 
} 

dovreste usare getDeclaredConstructors() per i costruttori non pubblici.

Riscritto con Stream.

private boolean hasParameterlessConstructor(Class<?> clazz) { 
    return Stream.of(clazz.getConstructors()) 
       .anyMatch((c) -> c.getParameterCount() == 0); 
} 
+2

La classe di costruzione non ha il metodo getParameterCount(): http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Constructor.html – gerrytan

+1

@gerrytan [Questo è un nuovo metodo Java 8] (http : //docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html#getParameterCount--). Puoi usare 'getParameterTypes' e verificare la dimensione dell'array restituito. –

1

È possibile creare un metodo che esegue il loop del costruttore della classe e verificare se c'è un costruttore no-arg.

boolean hasNoArgConstructor(Class<?> klass) { 
    for(Constructor c : klass.getDeclaredConstructors()) { 
    if(c.getParameterTypes().length == 0) return true; 
    } 
    return false; 
} 

Nota che utilizzando getDeclaredConstructors(), sarà incluso costruttore di default aggiunto dal compilatore. Ad esempio in seguito restituirà true

class A { } 

hasNoArgConstructor(A.class); 

È possibile utilizzare getConstructors() ma sarà solo controllare costruttori visibili. Quindi seguente restituirà falso

Problemi correlati