Java中的通用方法

Tyl*_*eat 0 java generics

我有更多的.NET背景,所以我在使用Java中需要的通用方法时遇到了一些麻烦.基本上,我有一个基类,调用它AbstractBase,从我的域对象继承(叫他们ClassAClassB).我想编写一个返回AbstractBase具有给定ID 的特定类型的方法.以下是我在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;
}
Run Code Online (Sandbox Code Playgroud)

我不认为我的脑袋完全包裹着Java做泛型的方式.这样的事情可能与Java有关吗?什么是最好的方法?

Chr*_*ung 7

public <T extends AbstractBase> T getById(long id, Class<T> typeKey) {
    if (ClassA.class.isAssignableFrom(typeKey)) {
        // ...
    } else if (ClassB.class.isAssignableFrom(typeKey)) {
        // ...
    } else {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

或者如果你想要在类上完全匹配(而不是潜在的子类类型):

public <T extends AbstractBase> T getById(long id, Class<T> typeKey) {
    if (typeKey == ClassA.class) {
        // ...
    } else if (typeKey == ClassB.class) {
        // ...
    } else {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)