Мне нужна помощь с отражением, так как я не могу заставить свой код работать так, как я хочу.Использование отражения в Java
У меня есть следующие:
nrThreads = Utilities.getNumberOfThreads(filePath, propertiesFile);
testName = Utilities.getTestName(filePath, propertiesFile);
System.out.println(Utilities.nowDate());
System.out.println("Inserting...");
switch (testName)
{
case "InsertAndCommit":
final InsertAndCommit[] threads = new InsertAndCommit[nrThreads];
for (int i = 0; i < nrThreads; i++) {
threads[i] = new InsertAndCommit();
threads[i].start();
}
break;
case "CommitAfterAllInserts":
final CommitAfterAllInserts[] threads1 = new CommitAfterAllInserts[nrThreads];
for (int i = 0; i < nrThreads; i++) {
threads1[i] = new CommitAfterAllInserts();
threads1[i].start();
}
break;
default: break;
}
Как вы можете видеть, я повторяю код внутри этого переключателя/корпуса. Я знаю, что могу сделать этот фрагмент кода, используя отражение, но я не могу понять, что это правильно.
Я сделал следующее:
Class<?> clazz = Class.forName(testName);
Constructor<?> ctor = clazz.getConstructor(String.class);
final Object[] obj = (Object[]) ctor.newInstance(); //this line isn't right, I need to declare the "threads" array (equivalent to: final InsertAndCommit[] threads = new InsertAndCommit[nrThreads];)
for (int i = 0; i < nrThreads; i++) {
//In this line I need to declare a new "generic constructor" with reflection (equivalent to threads[i] = new InsertAndCommit();)
threads[i].start();
}
Я много читал об отражении, и я не могу показаться, чтобы получить это право, пожалуйста, вы можете мне помочь?
Это будет иметь смысл только для использования отражения в этом случае, если '' InsertAndCommit' и CommitAfterAllInserts' как реализовать тот же интерфейс, или расширить один и тот же класс. Это так? – markbernard
Да, они оба реализуют Runnable Interface – SaintLike