1
我是斯卡拉新手。那么我怎么能解决方法镜像总是返回Any的问题呢?斯卡拉方法镜子返回类型永远是任何
class ABC{
def getString(): String = {
return "a,b,c";
}
}
//somewhere in the project
val ru = scala.reflect.runtime.universe
val mirror = ru.runtimeMirror(getClass.getClassLoader);
val c = Class.forName("ABC");
val classSymbol = mirror.classSymbol(c);
val classType = classSymbol.toType;
val im = mirror.reflect(c.newInstance())
val _method_ = classType.declaration(ru.newTermName("getString")).asMethod;
val method = im.reflectMethod(_method_);
println(method()); //this prints "a,b,c"
println(method().length()); // error, value length is not a member of any
我可以得到正确的函数,返回正确的对象,而不是任何?谢谢! 如果方法镜像不能返回适当的对象(如String),那么方法镜像的要点是什么?
提高这是相同的行为Java反射API。方法实例在被调用时将始终返回Object的一个实例。我不认为你所寻求的行为存在。这些反射类类型没有使用泛型设置,以便在调用时返回正确的返回类型。 – cmbaxter
@cmbaxter:这与泛型无关;这是一个基本的限制(尽管我甚至不愿将它称为限制) - 宇宙中没有办法让动态反映的实体具有静态类型。 –