如果只提供子类名,如何转换为特定的子类

时间:2017-08-31 02:01:25

标签: java class casting

我有两个客户端子类 - ClientAClientB,并且都实现了Client。我想通过提供客户端字符串名称来调用正确的newCall(Request)

例如,  ClientClassFinder.getClientClassFromName("ClientA").newCall(request)

但是,ClientClassFinder.getClientClassFromName("ClientA")似乎返回Client的类型而不是特定客户端。

那么如何让它发挥作用?

实际上ClientClientAClientB已存在,我无法更改它们。我的问题是如何通过提供客户端字符串名称来调用相应的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) {}
}

1 个答案:

答案 0 :(得分:0)

这可以通过Reflection来完成。检查此链接并了解您是否要使用它。

http://www.journaldev.com/1789/java-reflection-example-tutorial