Не принимает метод scanFileSystem и getHiddenClassObjectByKey.
package com.javarush.task.task36.task3606;
import java.io.File;
import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;
/*
Осваиваем ClassLoader и Reflection
*/
public class Solution {
private List<Class> hiddenClasses = new ArrayList<>();
private String packageName;
public Solution(String packageName) {
this.packageName = packageName;
}
public static void main(String[] args) throws ClassNotFoundException {
Solution solution = new Solution(Solution.class.getProtectionDomain().getCodeSource().getLocation().getPath() + "com/javarush/task/task36/task3606/data/second");
solution.scanFileSystem();
System.out.println(solution.getHiddenClassObjectByKey("hiddenclassimplse"));
System.out.println(solution.getHiddenClassObjectByKey("hiddenclassimplf"));
System.out.println(solution.getHiddenClassObjectByKey("packa"));
}
public void scanFileSystem() throws ClassNotFoundException {
File folder = new File(packageName);
File[] files = folder.listFiles((dir, name) -> name.endsWith("class"));
ClassLoader classLoader = this.getClass().getClassLoader();
for (File file : files) {
if (file.isFile()) {
String className = "com.javarush.task.task36.task3606.data.second." + file.getName().substring(0, file.getName().length() - 1 - 5);
classLoader.loadClass(className);
hiddenClasses.add(Class.forName(className));
}
}
}
public HiddenClass getHiddenClassObjectByKey(String key) {
key = key.toLowerCase();
try {
if (key.equals("hiddenclassimplse")) {
for(Class clazz : hiddenClasses){
if (clazz.getSimpleName().equals("HiddenClassImplSecond")) {
Constructor[] constructors = clazz.getDeclaredConstructors();
Constructor constructor = constructors[0];
constructor.setAccessible(true);
return ((HiddenClass) constructor.newInstance());
}
}
} else if (key.equals("hiddenclassimplf")) {
for(Class clazz : hiddenClasses){
if (clazz.getSimpleName().equals("HiddenClassImplFirst")) {
Constructor[] constructors = clazz.getDeclaredConstructors();
Constructor constructor = constructors[0];
constructor.setAccessible(true);
return ((HiddenClass) constructor.newInstance());
}
}
} else if (key.equals("packa")) {
for(Class clazz : hiddenClasses){
if (clazz.getSimpleName().equals("PackageAccessClass")) {
Constructor[] constructors = clazz.getDeclaredConstructors();
Constructor constructor = constructors[0];
constructor.setAccessible(true);
return ((HiddenClass) constructor.newInstance());
}
}
}
} catch (Exception e){
}
return null;
}
}