Scala覆盖返回类型

时间:2014-04-18 16:12:32

标签: scala

我有一个任务,我需要覆盖方法的返回类型。问题是调用方法但是不覆盖返回类型。请帮忙!

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;

请帮忙!提前谢谢!

1 个答案:

答案 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}}