以下代码完全符合我的要求,但是我很好奇是否有更好的方法。如果接口允许使用静态方法,或者如果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;
    }
}

最佳答案

是的,有更好的方法。使用界面:

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 );
}

10-06 12:05