我有两个客户端子类 - ClientA
和ClientB
,并且都实现了Client
。我想通过提供客户端字符串名称来调用正确的newCall(Request)
。
例如,
ClientClassFinder.getClientClassFromName("ClientA").newCall(request)
。
但是,ClientClassFinder.getClientClassFromName("ClientA")
似乎返回Client
的类型而不是特定客户端。
那么如何让它发挥作用?
实际上Client
,ClientA
和ClientB
已存在,我无法更改它们。我的问题是如何通过提供客户端字符串名称来调用相应的newCall()
?
课程定义
public class ClientClassFinder
{
private static Map<String, Class<? extends Client>> clientNameToClassMap = new HashMap<>();
//Static Initializers
static
{
clientNameToClassMap.put("ClientA", ClientA.class);
clientNameToClassMap.put("ClientB", ClientB.class);
}
public static Class<? extends Client> getClientClassFromName(String clientSimpleName)
{
return clientNameToClassMap.get(clientSimpleName);
}
}
public interface Client
{
}
public class ClientA implements Client
{
public Response newCall(Request request) {}
}
public class ClientB implements Client
{
public Response newCall(Request request) {}
}
答案 0 :(得分:0)
这可以通过Reflection来完成。检查此链接并了解您是否要使用它。
http://www.journaldev.com/1789/java-reflection-example-tutorial