package com.javarush.task.task36.task3602; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.Collections; import java.util.List; /* ÐайÑи клаÑÑ Ð¿Ð¾ опиÑÐ°Ð½Ð¸Ñ */ public class Solution { public static void main(String[] args) { System.out.println(getExpectedClass()); } public static Class getExpectedClass() { for (Class> clazz : Collections.class.getDeclaredClasses()) { if (List.class.isAssignableFrom(clazz) && Modifier.isPrivate(clazz.getModifiers()) && Modifier.isStatic(clazz.getModifiers())) { // полÑÑаем пеÑвÑй конÑÑÑÑкÑÐ¾Ñ Constructor> constructor = clazz.getDeclaredConstructors()[0]; // полÑÑаем знаÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑов по ÑмолÑÐ°Ð½Ð¸Ñ Ð² ÑооÑвеÑÑÑвии Ñ Ð¸Ñ Ñипами Object[] parameterValues = defaultValues(constructor.getParameterTypes()); try { // ÑазÑеÑаем доÑÑÑп к конÑÑÑÑкÑоÑÑ Ð¸ Ñоздаем обÑÐµÐºÑ ÐºÐ»Ð°ÑÑа constructor.setAccessible(true); Object obj = constructor.newInstance(parameterValues); // полÑÑаем меÑод get Ñ Ð¾Ð´Ð½Ð¸Ð¼ паÑамеÑÑом Method methodGet = clazz.getDeclaredMethod("get", int.class); methodGet.setAccessible(true); methodGet.invoke(obj, 10); } catch (InstantiationException | IllegalAccessException | NoSuchMethodException ignored) { } catch (InvocationTargetException e) { // if (e.getCause().toString().contains("IndexOutOfBoundsException")) // return clazz; e.printStackTrace(); } } } return null; } public static Object[] defaultValues(Class>[] types) { Object[] values = new Object[types.length]; for (int i = 0; i < types.length; i++) { Class> type = types[i]; if (type.equals(char.class) || type.equals(Character.class)) values[i] = '\u0000'; else if (type.equals(int.class) || type.equals(Integer.class)) // в клаÑÑе CopiesList, еÑли Ð¸Ð½Ð´ÐµÐºÑ Ð±Ð¾Ð»ÑÑе знаÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеданного // в конÑÑÑÑкÑоÑе, меÑод get бÑоÑÐ°ÐµÑ InvocationTargetException values[i] = 10; else if (type.equals(double.class) || type.equals(Double.class)) values[i] = 0.0; else values[i] = new Object(); } return values; } }