簡體   English   中英

超級java類中的jruby調用方法

[英]jruby call method from super java class

我正在嘗試在jruby中創建一個子類,該子類從超級java類屬性中覆蓋keys方法,這是因為我想通過key對屬性類中的條目進行排序:

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()正確調用的內容。

您需要讓您的大腦“忘記” 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方法)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM