我正在尝试在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()的内容。
答案 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}}方法)。