Java – typesafe delegation without instanceof

I have a service program:

filter(List<Criterion> criteria);

Is there a good way to internally assign method calls to the type safe implementation of specific criteria without involving instanceof and without confusing the API

I like the following things (although nature doesn't work):

filter(List<Criterion> criteria) {
   for (Criterion c : criteria) {
       dispatch(c);
   }
 }

dispatch(FooCriterion c) {...}
dispatch(BarCriterion c) {...}

Solution

Although it may be considered chaotic, a visitor like pattern can be used (using the dual scheduling principle):

public class Dispatcher {
    void dispatch(FooCriterion foo) { .. }
    void dispatch(BarCriterion bar) { .. }
}

class FooCriterion implements Criterion {
   void visit(Dispatcher d) {
      d.dispatch(this);
   }
}

Dispatcher d = new Dispatcher();
for (Criterion c : criteria) {
   c.visit(d);
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>