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