1 使用Class<T>泛型可以避免強制類型轉換
2 String.class的類型實際上是Class<String>
3 如果Class對應的類暫時未知,就用Class<?>
public class ObjectFactory {
public static Object getInstance(String name){
try {
Class cls = Class.forName(name);
return cls.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
} catch (InstantiationException e) {
e.printStackTrace();
return null;
} catch (IllegalAccessException e) {
e.printStackTrace();
return null;
}
}
}
public class Test extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Date date = (Date) ObjectFactory.getInstance("java.util.Date");
}
}
public class ObjectFactory2 {
public static <T> T getInstance(Class<T> cls){
try {
return cls.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
return null;
} catch (IllegalAccessException e) {
e.printStackTrace();
return null;
}
}
}
public class Test extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Date d = ObjectFactory2.getInstance(Date.class);
}
}
Object arr = Array.newInstance(String.class,10);
public static Object newInstance(Class<?> componentType,int... dimensions)
public static <T> T newInstance(Class<T> componentType,int length)
public class ArrayFactory {
public static <T> T[] newInstance(Class<T> componentType, int length){
return (T[]) Array.newInstance(componentType,length);
}
}
public class Test extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] strings = ArrayFactory.newInstance(String.class,5);
strings[0] = "瘋狂java講義";
int[][] ints = ArrayFactory.newInstance(int[].class,10);
ints[1] = new int[]{22,33};
Log.d("shj--","str "+strings[0]+" ints "+ints[1].toString());
}
}