我正在尝试使用 Class.forName 并且我的 Intellij 正在引发编译错误。我的 IntelliJ 以红色突出显示“theResponse”(在 testMethod 中)并给我这个错误:
cannot find symbol symbol : method
这是我正在使用的代码(和测试)...
package http.response;
public class TestClass {
public TestClass() {
PublicRoute publicRoute = new PublicRoute();
}
public String testMethod() throws ClassNotFoundException {
Class c = Class.forName("http.response.PublicRoute");
return c.theResponse("hi");
}
}
package http.response;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
public class TestClassTest {
@Test
public void test() throws ClassNotFoundException {
TestClass testClass = new TestClass();
assertEquals("public", testClass.testMethod());
}
}
更新: 我试图做的是“多态地”从类中调用 theResponse,该类作为字符串从 HashMap 返回。我该怎么做?我(松散地)遵循这个例子,但我没有完全理解它(http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism)。这是我正在尝试做的简化版本。希望这是有道理的。
package http.response;
import java.util.HashMap;
public class TestClass {
HashMap map;
public TestClass(HashMap map) {
this.map = map;
}
public String testMethod(String lookupValue) throws ClassNotFoundException {
String className = map.get(lookupValue);
Class c = Class.forName("http.response." + className);
return c.theResponse();
}
}