@thatmaniscool

Какую роль выполняет метод newInstance в Java?

По книги 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, как ис ним правильно работать?
  • Вопрос задан
  • 1725 просмотров
Пригласить эксперта
Ответы на вопрос 1
jamakasi666
@jamakasi666 Куратор тега Java
Просто IT'шник.
Это рефлексия. У тебя неизвестный тип класса Class type. Далее тебе нужно создать новый экземпляр его для этого и используется динамическое создание класса type.newInstance().
При обычном раскладе это было бы так MyDataClass type. и соответсвенно type = new MyDataClass();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы