我有一个任务,我需要覆盖方法的返回类型。问题是调用方法但是不覆盖返回类型。请帮忙!
abstract class Parser
{
type T1 <: Any;
def test1(): T1;
type T2 <: String;
def test2(): T2;
}
//class path: parser.ParserA
class ParserA extends Parser
{
type T1 = String;
override def test1(): T1=
{
return "a,b,c";
}
type T2 = String;
override def test2(): T2=
{
return "a,b,c";
}
}
//some where in the project
val pa = Class.forName("parser.ParserA").newInstance().asInstanceOf[Parser];
println(pa.test1().length());// error: value length is not a member of pa.TYPE_4
println(pa.test2().length());// this works, print 5;
请帮忙!提前谢谢!
答案 0 :(得分:2)
由于pa
的类型为Parser
,因此T1
唯一知道的是Any
的子类型,因此它可能没有length
会员。
由于您知道实际类型为ParserA
,因此您应该转换为Parser
而不是val pa = Class.forName("parser.ParserA").newInstance().asInstanceOf[ParserA];
:
T1
编辑:如果您只需要val pa = Class.forName("parser.ParserA").newInstance().asInstanceOf[Parser { type T1 <: String }]
成为字符串的子类型,则可以将演员表更改为:
{{1}}