gpt4 book ai didi

Java 泛型返回动态类型

转载 作者:行者123 更新时间:2023-12-02 03:05:29 25 4
gpt4 key购买 nike

想象一下这样的情况:

// Marker
interface Type {}

interface CustomType extends Type {
int getSomething();
int getAnotherThing();
}

class CustomTypeImpl implements CustomType {
public int getSomething() {
return 1;
}
public int getAnotherThing() {
return 2;
}
}

在另一个类中,我想要一个像这样的通用方法:

public <T extends CustomType> T getFromInterface(Class<T> clazz)

返回我放入参数的类的实现。例如,我想像下面这样调用这个方法:SomeInstanceOfClass.getFromInterface(CustomType.class)它返回 CustomTypeImpl 的实例.

@EDIT :我忘了提及,我可以访问一个存储可用作 getFromInterface(Class<T> clazz) 参数的所有接口(interface)的方法。方法。

该方法的签名是:public Set<? extends Class<? extends Type>> allTypes()

请问我该如何做到这一点?

最佳答案

您可以使用反射并使用类对象创建一个新实例。关于哪个类实现某个接口(interface)的信息可以存储在某个映射中。

private static final Map<Class<?>, Class<?>> interfaceToImplementationMap = new HashMap<Class<?>, Class<?>>() {{
put(CustomType.class, CustomTypeImpl.class);
}};

public static void main(String[] args) throws InstantiationException, IllegalAccessException {
CustomType instance = getFromInterface(CustomType.class);
System.out.println(instance);
}

public static <T> T getFromInterface(Class<T> clazz) throws IllegalAccessException, InstantiationException {
return clazz.cast(interfaceToImplementationMap.get(clazz).newInstance());
}

关于Java 泛型返回动态类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41809539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com