在JRuby中的Java类实现中覆盖具有相同名称的2个方法

时间:2017-12-19 10:25:12

标签: java polymorphism jruby method-overriding

我想在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种不同方法?

0 个答案:

没有答案