下面的代码正是我所希望的,但是我很好奇是否有更好的方法。如果接口允许静态方法,或者如果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;
}
}
3条答案
按热度按时间z9zf31ra1#
是的,有更好的办法。使用接口:
wfsdck302#
很难猜出您“到底想做什么”,但是我假设您有一个带有静态解析方法的tparsedclass,它用来自tdata示例的数据填充一个新的tparsedclass示例。
如果您认为需要某种接口标记来指示类可以解析的其他对象,那么为什么不将parse方法实现为非静态方法,用传递对象的数据填充“this”?
例如
要转换,您可以执行以下操作:
而不是
o2g1uqev3#
可以将tparsedclass定义为tparsedclass扩展了abstractclass,但class对象并不表示抽象类,它是通过反射引用类型定义的一种方式。