J'utilise une classe qui accepte
méthodes surchargées
je voulais dire les signatures argument optionnel (pas sûr si ce qui compte dans ce cas, mais peut-être)JRuby: classe java accepte les arguments dans la CISR, mais renvoie l'erreur lorsqu'elle est appelée à partir d'une classe
quand j'appelle cela de la CISR, il fonctionne comme prévu, par exemple, il accepte les arguments
(espaces de noms de filtrage et des mots de passe avec [filtré] si nécessaire pour garder le secret de choses secrètes et ma compagnie heureux)
jruby-1.5.0 > require 'java'
=> true
jruby-1.5.0 > Dir.glob('lib/java/*.jar').each{|jar| require jar}
=> ["lib/java/[filtered].jar", "lib/java/[filtered].jar", "lib/java/[filtered].jar"]
jruby-1.5.0 > import "[filtered].His351n1"
=> Java::[filtered]::His351n1
jruby-1.5.0 > broker = [filtered].Broker.new('[filtered]', '[filtered]')
=> #<Java::[filtered]::Broker:0x4c4936f3>
jruby-1.5.0 > rpc = "[filtered]"
=> "[filtered]"
jruby-1.5.0 > his = His351n1.new(broker, rpc)
=> #<Java::[filtered]::His351n1:0x7fb6a1c4>
et voici mon spec et le code correspondant
before(:each) do
@base = Legacy::Base.new
end
it "should create a valid his351n1 object" do
his = @base.create_his351n1
puts his.inpsect
end
# from within Legacy::Base
def create_his351n1
his = His351n1.new(build_broker, rpc)
end
et enfin, l'erreur qui échoue sur l'appel à His351n1.new
1)
ArgumentError in 'Legacy::Base should create a valid his351n1 object'
wrong # of arguments(2 for 0)
Pour compliquer les choses, le RIR, c'est aussi apparemment valide:
jruby-1.5.0 > his = His351n1.new
=> #<Java::[filtered]::His351n1:0x5ad3c69c>
, voici également les méthodes java surchargées
public His351n1() {
super();
}
public His351n1(Broker broker) {
this(broker, DEFAULT_SERVER);
}
public His351n1(BrokerService bs) {
this(bs.getBroker(), bs.toString());
}
public His351n1(Broker broker, String serverAddr) {
super(broker, serverAddr, "string", true);
}
public His351n1(final Broker broker, final String serverAddr, final String library)
{
super(broker, serverAddr, library, true);
}