我有一堆类,它们都有相同的构造函数签名。我有一个方法,根据一些参数返回该类型的对象(这些参数在构造函数中不是相同的参数),但我似乎无法弄清楚如何制作一个适用于所有类的泛型方法。
作为不同的方法分开,我可能会有这样的东西:
public ImplementationClassA getClassA(long id)
{
SomeGenericThing thing = getGenericThing(id);
return new ImplementationClassA(thing);
}
public ImplementationClassB getClassB(long id)
{
SomeGenericThing thing = getGenericThing(id);
return new ImplementationClassB(thing);
}
可以看到,它们惊人地相似,只是实现类不同。假设所有实现类具有相同的构造函数,我如何创建一个泛型方法来处理它们?
我试了一下,但它不起作用,因为T
没有被识别…但感觉和我想要的差不多:
public T getImplementationClass(Class<T> implementationClass, long id)
{
SomeGenericThing thing = getGenericThing(id);
return implementationClass.getConstructor(SomeGenericThing.class)
.newInstance(thing);
}
调用者现在可以简单地执行getImplementationClass(ImplementationClassA.class, someID)
。
对于反射和泛型类型,这是可能的吗?
泛型语法需要声明T
。在泛型方法中,将<>
(例如<T>
)中泛型类型参数的声明放在返回类型(T
:
public <T> T getImplementationClass(Class<T> implementationClass, long id)
如果你所有的实现类都实现了一些接口或子类或基类,那么你可能想要在T
上设置一个绑定:
public <T extends BaseClassOrInterface> T getImplementationClass(
Class<T> implementationClass, long id)