Question
Je travaille avec une bibliothèque Java dans JRuby. Je lis un objet à partir d'un fichier, et je dois le transmettre comme un type d'objet différent à un second constructeur:
@hmm_model = ObjectInputStream.new(FileInputStream.new(LINGPIPE_MODEL_PATH))
@tagger = HmmDecoder.new(@hmm_model)
@hmm_model est de type ObjectInputStream, et doit être jeté à (HiddenMarkovModel). De toute évidence, ce serait facile en Java, il serait juste:
@tagger = HmmDecoder.new((HiddenMarkovModel)@hmm_model)
Mais, bien sûr, cela ne fonctionne pas dans JRuby. Y at-il vraiment un moyen de jeter explicitement la @hmm_model être du type correct?
La solution
Alors, je ne suis pas très lumineux. L'interface JVM JRuby est assez intelligent pour se jeter, je faisais l'appel au constructeur de manière incorrecte. L'appel réel est:
@tagger = HmmDecoder.new(@hmm_model.readObject())
et JRuby gère correctement la conversion de type à un HiddenMarkovModel.
JRuby: 1 moi: 0