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)
是的,还有更好的方法.使用接口:
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)