interface NodeTraverser { NodeTraverser filter(Predicate filter); NodeTraverser filter1(Predicate filter); NodeTraverser filter2(Predicate filter); } interface Predicate

{ } class Test { void foo(NodeTraverser traverser, NodeTraverser traverser1, NodeTraverser traverser2, Predicate filter, Predicate filter1, Predicate filter2) { traverser.filter(filter); traverser.filter1(filter); traverser.filter2(filter); //"'filter2(Predicate>)' in 'NodeTraverser' cannot be applied to '(Predicate>)'" traverser1.filter(filter); traverser1.filter1(filter); traverser1.filter2(filter); // "'filter2(Predicate>)' in 'NodeTraverser' cannot be applied to '(Predicate>)'" traverser2.filter(filter); // "'filter(Predicate>)' in 'NodeTraverser' cannot be applied to '(Predicate>)'" traverser2.filter1(filter); traverser2.filter2(filter); traverser.filter(filter1); traverser.filter1(filter1); traverser.filter2(filter1);// "'filter2(Predicate>)' in 'NodeTraverser' cannot be applied to '(Predicate>)'" traverser1.filter(filter1); traverser1.filter1(filter1); traverser1.filter2>(filter1);// "'filter2(Predicate>)' in 'NodeTraverser' cannot be applied to '(Predicate>)'" traverser2.filter(filter1);// "'filter(Predicate>)' in 'NodeTraverser' cannot be applied to '(Predicate>)'" traverser2.filter1(filter1); traverser2.filter2(filter1); traverser.filter(filter2); traverser.filter1(filter2); traverser.filter2(filter2);// "'filter2(Predicate>)' in 'NodeTraverser' cannot be applied to '(Predicate>)'" traverser1.filter(filter2); traverser1.filter1(filter2); traverser1.filter2(filter2);// "'filter2(Predicate>)' in 'NodeTraverser' cannot be applied to '(Predicate>)'" traverser2.filter(filter2);// "'filter(Predicate>)' in 'NodeTraverser' cannot be applied to '(Predicate>)'" traverser2.filter1(filter2); traverser2.filter2(filter2); } }