我有更多的.NET背景,所以我在使用Java需要的通用方法时遇到了一些麻烦。基本上,我有一个基类,称之为AbstractBase
,我的域对象从中继承(称为ClassA
和ClassB
)。我想编写一个方法,返回具有给定ID的特定类型的AbstractBase
。以下是我在C#中的表现:
public T getById<T>(long id) where T : AbstractBase
{
if (T is ClassA)
// find and return object of type ClassA
else if (T is ClassB)
// find and return object of type ClassB
else
return null;
}
我认为我的脑袋完全不受Java做泛型的影响。这样的事情可能与Java有关吗?什么是最好的方法?
答案 0 :(得分:7)
public <T extends AbstractBase> T getById(long id, Class<T> typeKey) {
if (ClassA.class.isAssignableFrom(typeKey)) {
// ...
} else if (ClassB.class.isAssignableFrom(typeKey)) {
// ...
} else {
// ...
}
}
或者如果你想要对类进行精确匹配(而不是潜在的子类类型):
public <T extends AbstractBase> T getById(long id, Class<T> typeKey) {
if (typeKey == ClassA.class) {
// ...
} else if (typeKey == ClassB.class) {
// ...
} else {
// ...
}
}