|
|
@@ -44,12 +44,12 @@ public final class ClassInspector {
|
|
|
* zamienia na {@code Integer}. W pozostałych przypadkach po prostu zwraca
|
|
|
* przekazany argument bez żadnych zmian. W szczególności metoda może być
|
|
|
* bezpiecznie wywoływana na rzecz wrapperów:
|
|
|
- * <pre>{@code wrapPrimitive(wrapPrimitive(int.class));}</pre>
|
|
|
+ * <pre>{@code box(box(int.class));}</pre>
|
|
|
* @param clazz
|
|
|
* @return
|
|
|
*/
|
|
|
@SuppressWarnings("PMD")
|
|
|
- public static Class<?> wrapPrimitive(Class<?> clazz) {
|
|
|
+ public static Class<?> box(Class<?> clazz) {
|
|
|
|
|
|
if (byte[].class.equals(clazz)) {
|
|
|
return Byte[].class;
|
|
|
@@ -92,6 +92,50 @@ public final class ClassInspector {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @SuppressWarnings("PMD")
|
|
|
+ public static Class<?> unbox(Class<?> clazz) {
|
|
|
+
|
|
|
+ if (Byte[].class.equals(clazz)) {
|
|
|
+ return byte[].class;
|
|
|
+ } else if (Short[].class.equals(clazz)) {
|
|
|
+ return short[].class;
|
|
|
+ } else if (Integer[].class.equals(clazz)) {
|
|
|
+ return int[].class;
|
|
|
+ } else if (Long[].class.equals(clazz)) {
|
|
|
+ return long[].class;
|
|
|
+ } else if (Character[].class.equals(clazz)) {
|
|
|
+ return char[].class;
|
|
|
+ } else if (Float[].class.equals(clazz)) {
|
|
|
+ return float[].class;
|
|
|
+ } else if (Double[].class.equals(clazz)) {
|
|
|
+ return double[].class;
|
|
|
+ } else if (Boolean[].class.equals(clazz)) {
|
|
|
+ return boolean[].class;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (Byte.class.equals(clazz)) {
|
|
|
+ return byte.class;
|
|
|
+ } else if (Short.class.equals(clazz)) {
|
|
|
+ return short.class;
|
|
|
+ } else if (Integer.class.equals(clazz)) {
|
|
|
+ return int.class;
|
|
|
+ } else if (Long.class.equals(clazz)) {
|
|
|
+ return long.class;
|
|
|
+ } else if (Character.class.equals(clazz)) {
|
|
|
+ return char.class;
|
|
|
+ } else if (Float.class.equals(clazz)) {
|
|
|
+ return float.class;
|
|
|
+ } else if (Double.class.equals(clazz)) {
|
|
|
+ return double.class;
|
|
|
+ } else if (Boolean.class.equals(clazz)) {
|
|
|
+ return boolean.class;
|
|
|
+ } else if (Void.class.equals(clazz)) {
|
|
|
+ return void.class;
|
|
|
+ } else {
|
|
|
+ return clazz;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* Sprawdza, czy podana klasa reprezentuje nieopakowany typ prymitywny (np {@code int}).
|
|
|
* @param clazz
|
|
|
@@ -226,7 +270,7 @@ public final class ClassInspector {
|
|
|
*/
|
|
|
public static boolean isInstance(Class<?> ssuper, Object value) {
|
|
|
assert ssuper != null;
|
|
|
- return value==null || ssuper.isInstance(value) || wrapPrimitive(ssuper).isInstance(value);
|
|
|
+ return value==null || ssuper.isInstance(value) || box(ssuper).isInstance(value);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -247,6 +291,10 @@ public final class ClassInspector {
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
+
|
|
|
+ public static Class<?> getClass(Object value) {
|
|
|
+ return (value==null) ? void.class : value.getClass();
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* Grupowa wersja funkcji {@code Class.getClass}.
|
|
|
@@ -256,13 +304,13 @@ public final class ClassInspector {
|
|
|
* @return
|
|
|
*/
|
|
|
@SuppressWarnings("PMD.MethodReturnsInternalArray")
|
|
|
- public static <T> Class<?>[] getClass(T... values) {
|
|
|
+ public static Class<?>[] getClass(Object[] values) {
|
|
|
if( values.length == 0) {
|
|
|
return EMPTY;
|
|
|
}
|
|
|
Class<?> types[] = new Class<?>[values.length];
|
|
|
for(int i=0; i<values.length; i++) {
|
|
|
- types[i] = (values[i]==null) ? Object.class : values[i].getClass();
|
|
|
+ types[i] = getClass(values[i]);
|
|
|
}
|
|
|
return types;
|
|
|
}
|