return (Object[])Array.newInstance(c, i);
}
+ public static Object lub(Object argo) {
+ if (argo instanceof Object[]) return lub((Object[])argo);
+ return argo;
+ }
public static Object[] lub(Object[] argo) {
if (argo==null) return null;
Class c = null;
- for(Object o : argo) if (o != null) c = Reflection.lub(c, o.getClass());
+ for(int i=0; i<argo.length; i++) {
+ if (argo[i]==null) continue;
+ argo[i] = lub(argo[i]);
+ c = Reflection.lub(c, argo[i].getClass());
+ }
if (c==null) c = Object.class;
Object[] ret = Reflection.newArray(c, argo.length);
System.arraycopy(argo, 0, ret, 0, argo.length);
if (a==b) return a;
if (a.isAssignableFrom(b)) return a;
if (b.isAssignableFrom(a)) return b;
+ if (a.isArray() && b.isArray())
+ return arrayClass(lub(a.getComponentType(), b.getComponentType()));
return lub(b, a.getSuperclass());
}
+ public static Class arrayClass(Class c) {
+ return Reflection.newArray(c, 0).getClass();
+ }
+
/** a version of <tt>Class.forName</tt> that returns <tt>null</tt> instead of throwing an exception */
public static Class forNameOrNull(String s) {
try {