2015-01-07 23 views

cevap

11

Sen 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; 
} 

Sen halka açık olmayan markalar için getDeclaredConstructors() kullanmak zorunda kalacak vardır birini bulduğunda durdurma, tüm Constructor s almak ve parametreler sayılarını kontrol edebilirsiniz.

Stream ile yeniden yapıldı.

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

Yapıcı sınıfı hiçbir getParameterCount() yöntemi vardır : //docs.oracle.com/javase/8/docs/api/java/lang/reflect/Constructor.html#getParameterCount--). GetParameterTypes öğesini kullanabilir ve döndürülen dizinin boyutunu kontrol edebilirsiniz. – gerrytan

+1

@gerrytan [Yani yeni bir Java 8 yöntemidir] (http: –

1

Sen sınıfının yapıcısı döngüler bir yöntem oluşturmak ve herhangi no-arg yapıcı olup olmadığını kontrol edebilirsiniz. getDeclaredConstructors() kullanarak, derleyici tarafından eklenen varsayılan yapıcı ekleneceği anlamına

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

Not. Örneğin şu

class A { } 

hasNoArgConstructor(A.class); 

Sen getConstructors() kullanabilirsiniz gerçek dönecektir ancak yalnızca görünür kurucular kontrol edecektir. Dolayısıyla sen Bahar kullanıyorsanız ClassUtils.hasConstructor() kullanabilirsiniz

3

return false olur:

ClassUtils.hasConstructor(obj.getClass()); 
İlgili konular