我想在JRuby中创建一个Apache Jena OpVisitorByType的实现,但是我想要使用相同的方法名称覆盖两个超级方法:visit(OpBGP op)
和visit(OpTriple op)
这是我做的:
class Visitor < org.apache.jena.sparql.algebra.OpVisitorByType
include_package 'org.apache.jena.sparql.algebra.op'
java_signature 'void visitN(OpN op)'
def visitN(op)
puts op.inspect
op.getElements.to_a.each {|elOp| self.visit(elOp)}
end
# [...] Redifining also all required abstract methods: visit2(Op2 op), visit1(Op1 op), visitFilter(OpFilter op), visitLeftJoin(OpLeftJoin op)
java_signature 'void visit(OpBGP op)'
def visitBGP(op)
puts "OpBGP #{op.inspect}"
op.getPattern.getList.as_a.each {|triple| self.visit(triple)}
end
java_signature 'void visit(OpTriple op)'
def visitTriple(op)
puts "OpTriple #{op.inspect}"
end
end
通过这种实现,永远不会调用Ruby方法visitBGP
。
如果我重命名visit
,则会调用它,但会调用visit(<Op class> op)
的所有号码,而不仅仅是visit(OpBGP op)
。
有没有办法定义那些需要实现具有相同名称,相同arity但不同参数类的Java方法的2种不同方法?