public interface Foo {
}
public class SpecificFoo implements Foo {
}
public interface SomeInterface {
void thisMethod(Foo someKindOfFoo);
}
public class SomeClass implements SomeInterface {
public void thisMethod(Foo someKindOfFoo) {
// calling code goes into this function
System.out.println("Dont go here please");
}
public void thisMethod(SpecificFoo specificFoo) {
// not into this function
System.out.println("Go here please");
}
}
public class SomeOlderClass {
public SomeOlderClass( SomeInterface inInterface ) {
SpecificFoo myFoo = new SpecificFoo();
inInterface.thisMethod(myFoo);
}
}
电话:
SomeClass myClass = new SomeClass();
SomeOlderClass olderClass = new SomeOlderClass(myClass);
我有一个接口(Some Interface
),几个班次上调(例如SomeOlderClass
)。 我有一个班子来实施接口,但我想在具体实施方面开展安全行动,这些具体实施活动已进入通用接口。
如上述法典所示,我真的希望能够采用另一种方法,与接口中的具体类型相匹配。 这并不奏效。 我的假设是,打电话的代码只了解接口,而不是使用更具体的方法(即使通过<代码>)实施。 具体Foo 执行 Foo
因此,我如何能够以最明智的方式做到这一点? 我可以通过在接口实施类别中添加一个词句(<条码>SomeClass):
public void thisMethod(Foo someKindOfFoo) {
// calling code goes into this function
if ( someKindOfFoo.getClass().equals(SpecificFoo.class) )
thisMethod(SpecificFoo.class.cast(someKindOfFoo));
else
System.out.println("Dont go here please");
}
然而,这并不奇怪,因为我必须补充的是,如果我每次发言都加上一种新的oo。 我可能忘记这样做。
另一种选择是,在<代码>SomeInterface上添加<>SpecificFoo,让汇编者提醒我,我需要在<编码>SomeClass上执行。 问题在于,我最后增加了相当一部分锅炉板。 (如果其他人实施接口,他们必须采用新方法和任何测试)
鉴于<代码>,我似乎还有另一个选择。 Foo和SpecificFoo
相互关联。 想法?
MORE INFO:
我确实在努力尝试和简化这一问题。 由于我补充了更多的细节,复杂性大为增加。 但不管怎样, 我认为我可以解释。
基本上,我用Ry 瑞在其上解释的指挥模式书写了《世界展望》网站。
它在《古角度法典》方面有多项执行,但很多人却遭受这一继承问题。 我认为,这是在《全球WT-RPC法典》上的一个节奏:。 HOWEVER,因为我正在进一步实施,我注意到一个类似的问题,即纯出现在客户一方,同时以东道方式出现。 (即所有支离破碎,无 g。)
因此,我把基本想法推向一个 raw瓦指挥线的原案,并看到了上文所述的同一问题。
如果你随同Ry 瑞讨论的话,Foo
是一种行动,SpecificFoo
是我想呼吁的一项具体行动。 <代码>SomeInterface为客户的RPC服务,SomeClass
为RPC服务机边。 <代码>SomeOlderClass是一套能够了解海滩和什么东西的碎石服务。
显然,权利? 正如我说过的那样,我认为,所有南太平洋区域渔业管理组织的不光是把水推上基问题的水上,这就是为什么我尽量简化水面。