По книги Thinking Java, требует выполнить упражнение. Итак, прежде всего я создают топовый класс:
public class TOP implements itf2, itf1{}
Далее создаю несколько интерфейсов.
public interface itf1 {}
public interface itf2 {}
public interface itf3 {}
Далее создаю несколько классов расширяемые по иерархии
public class DownA extends TOP implements itf1, itf2 {}
public class DownB extends DownA implements itf1, itf2, itf3{}
public class DownC extends DownB{}
И соотвественно создаю главный класс с методами.
public class MainClass {
private static Formatter f = new Formatter (System.out);
private static void Title (){
f.format("%-15s %10s %10s\n", "Class", "Interface", "Status");
f.format("%-15s %10s %10s\n", "-----", "---------", "------");
}
private static void DataName (Class cc){
f.format("%-15s %10s %10s\n", cc.getName(), " ", " ");
}
private static void DataInterface (Class cc){
f.format("%-15s %10s %10s\n", " ", cc.getName(), cc.isInterface());
}
public static Class ShowDatas (Class cc){
if (cc == null)
System.exit(1);
DataName (cc);
for (Class face : cc.getInterfaces())
DataInterface (face);
f.format("%-15s %10s %10s\n", "-----", "---------", "------");
Class up = cc.getSuperclass();
return ShowDatas (up);
}
public static void main(String[] args) {
Class c = null;
Title ();
try{
c = Class.forName("Demo.DownC");
} catch (ClassNotFoundException e){
e.printStackTrace();
}
ShowDatas (c);
}
}
Теперь, мне нужно сделать сделать это в виде массива, для этого нужно использовать newInstance. Но дело в то, что я не понимаю, для чего он именно нужен. Пример кода:
Топовый класс:
public class TOP {
private static int counter = 0;
private long id = counter ++;
public String toString (){
return Long.toString(id);
}
}
Далее создаю дополнительный класс и создаю массив типа List
public class DownClass <T> {
private Class <T> type;
private List <T> mylist;
public DownClass (Class <T> type){
this.type = type;
mylist = Arrays.asList();
}
public List <T> arr (int size){
try {
for (int i=0; i!=size; i++)
mylist.add(type.newInstance());// Добавляем экземпляр класса в массив.
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mylist;
}
}
И соотвесвтенно создаю главный класс
public class MainClass {
public static void main(String[] args) {
DownClass DC = new DownClass (TOP.class); // Передаем экзепляр класса.
System.out.println(DC.arr(10));
}
}
Для чего и для каких целей используется метод newInstance, как ис ним правильно работать?