Java中的泛型方法
我有更多的.NET背景,所以我一直很难想出Java中需要的通用方法。基本上,我有一个基类,称它为Java中的泛型方法,java,generics,Java,Generics,我有更多的.NET背景,所以我一直很难想出Java中需要的通用方法。基本上,我有一个基类,称它为AbstractBase,我的域对象从中继承(称它们为ClassA和ClassB)。我想编写一个方法,用给定的ID返回特定类型的AbstractBase public T getById(长id),其中T:AbstractBase { if(T为A类) //查找并返回ClassA类型的对象 else if(T为B类) //查找并返回ClassB类型的对象 其他的 返回null; } 我不认为我的头脑
AbstractBase
,我的域对象从中继承(称它们为ClassA
和ClassB
)。我想编写一个方法,用给定的ID返回特定类型的AbstractBase
public T getById(长id),其中T:AbstractBase
{
if(T为A类)
//查找并返回ClassA类型的对象
else if(T为B类)
//查找并返回ClassB类型的对象
其他的
返回null;
}
我不认为我的头脑完全像Java做泛型一样。这样的事情可能与Java有关吗?最好的方法是什么?public T getById(长id,类typeKey){
public <T extends AbstractBase> T getById(long id, Class<T> typeKey) {
if (ClassA.class.isAssignableFrom(typeKey)) {
// ...
} else if (ClassB.class.isAssignableFrom(typeKey)) {
// ...
} else {
// ...
}
}
if(ClassA.class.isAssignableFrom(typeKey)){
// ...
}else if(ClassB.class.isAssignableFrom(typeKey)){
// ...
}否则{
// ...
}
}
或者,如果您希望类完全匹配(而不是潜在的子类类型):
public T getById(长id,类typeKey){
if(typeKey==ClassA.class){
// ...
}else if(typeKey==ClassB.class){
// ...
}否则{
// ...
}
}
噢,你这个可怜的C#灵魂。键入擦除--准备哭泣。@KirkWoll:+1我完全同意。:'(泛型代码的全部要点是它是“泛型”的,即不依赖于类型Yep,这是我一直在寻找的。谢谢,Chris!很快就会接受答案。。。
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 {
// ...
}
}