java中的动态方法返回类型

jdc*_*589 1 java generics reflection methods

下面的代码正是我想要的,但我很好奇是否有更好的方法来实现它.如果Interfaces允许静态方法,或者Java方法可以在C#中扩展/参数化,那么这将更加容易.

我宁愿将参数" Class<TParsedClass> c" 替换为" Class<AbstractClass> c".对我来说," Class<AbstractClass>"意味着一个扩展某个抽象类的类,但显然这是错误的,因为当我使用该参数并按照我上面的描述使用它时,我会遇到编译器错误.

public <TData, TParsedClass> TParsedClass convert(TData data, Class<TParsedClass> c)
{
    try 
    {
        return (TParsedClass)c.getMethod("parse", data.getClass()).invoke(c, data);
    } 
    catch(Exception e)
    {
        e.printStackTrace();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*yak 5

是的,还有更好的方法.使用接口:

public interface Parser< TData, TParsedClass >
{
    TParsedClass parse( TData data );
}

public class IntParser
    implements Parser< String, Integer >
{
    public Integer parse( String data )
    {
       return Integer.valueOf( data );
    }
}

public <TData, TParsedData> TParsedData convert(
        TData data,
        Parser< TData, TParsedData > parser
    )
{
    return parser.parse( data );
}
Run Code Online (Sandbox Code Playgroud)