超级java类的jruby调用方法

时间:2014-12-03 11:27:39

标签: java jruby

我正在尝试在jruby中创建一个子类,它会覆盖超级java类属性中的keys方法,因为我想通过键对属性类中的条目进行排序:

class SortedProperties < java.util.Properties  
 def keys
  keysEnum = super().keys()
  keyList = java.util.Vector.new
  keysEnum.elements.each do |element|
    puts element.to_s
    keyList.add(element.to_java(:String))
  end
  java.util.Collections.sort(keyList)
  puts keyList.elements().to_s
  return keyList.elements()
 end
end

我对超级声明确实有些不对劲,但我不知道是什么。搜索了很多,但无法找到任何指向我在超类属性中正确调用方法keys()的内容。

1 个答案:

答案 0 :(得分:1)

你需要让你的大脑&#34;忘记&#34; Java样式super语法,只需以Ruby方式执行,例如

class SortedProperties < java.util.Properties
 def keys
  keyList = java.util.Vector.new
  super.each do |element|
    keyList.add(element.to_java(:String))
  end
  java.util.Collections.sort(keyList)
  return keyList.elements()
 end
end

props = java.util.Properties.new
props.setProperty 'bbb', 'B'
props.setProperty 'aaa', 'A'
props.setProperty 'ccc', 'C'

props.store java.lang.System.out, ' raw-properties'

props = SortedProperties.new
props.setProperty 'bbb', 'B'
props.setProperty 'aaa', 'A'
props.setProperty 'ccc', 'C'

props.store java.lang.System.out, ' sorted-properties'

调用super已经返回结果,它可能已经被JRuby转换为Ruby,即使它不是Java Enumeration/Collection都是Ruby Enumerable(或者至少有each 1}}方法)。