这里我们有多个使用相关语法的自定义查询 DSL。我正在创建一个AbstractBuilder
,以便所有的共性都可以写在一个地方。问题在于这会导致方法链接出现问题。当我尝试从一个方法链接到AbstractBuilder
一个子类时,如果不进行强制转换,它就无法工作。
使用这些课程:
class AbstractBuilder{
protected final StringBuilder bldr = new StringBuilder();
AbstractBuilder addValue( String name, String value ){
bldr.append( name ).append( '=' ).append( value )append( ',' );
return this;
}
String toString(){
return bldr.toString();
}
}
class IntBuilder extends AbstractBuilder{
IntBuilder addValue( String name, int value ){
bldr.append( name ).append( '=' ).append( value )append( ',' );
return this;
}
}
这有效
new IntBuilder().addValue( "age", 12 ).addValue( "name", "Bruce" ).toString();` but `new IntBuilder().addValue( "name", "Bruce" ).addValue( "age", 12 ).toString();
除非你做出丑陋的演员表,否则不会:
((IntBuilder) (new IntBuilder().addValue( "name", "Bruce" ))).addValue( "age", 12 ).toString();
现在我想我可以重写每个方法并通过调用他们的父母(通过super.addValue( name, value );
)来实现它们,但这真的很难看。
我怎样才能让每个方法都返回当前类而不是定义它的类?