如何访问 Java jar 文件的 class 的受保护方法
How to access protected method of Java jar file's class
我正在使用 Java 命令行应用程序(它是开源的)作为我的 jrubyonrails
项目的 jar 文件。主要应用如下
public class Decoder extends Annotator {
public Decoder() {
super();
}
public static void main(String[] args) {
... // Do something that I don't want
myDesiredMethod();
... // And some other thing
}
...
}
我想跳过很多步骤,我只想要 myDesiredMethod
功能。它是来自父 Annotator
class.
的 protected
方法
public class Annotator extends Helper {
...
protected SomeClass myDesiredMethod(boolean reMap) throws Exception { ... }
...
}
Annotator
class 没有任何 public 构造函数,所以我不能:
ann = Annotator.new
它引发了这个错误:TypeError: no public constructors for Annotator
。
然后我尝试实现另一个继承 Annotator
的 class 以访问 myDesiredMethod
。这是我目前试过的jruby
代码
require 'java'
require 'decoder.jar'
java_import java.util.ArrayList
java_import java.lang.StringBuilder
module MyModule
class RuDecoder < Annotator
include_package 'com.decoder'
def self.my_method
myDesiredMethod
end
end
它 returns 错误:NoMethodError: undefined method 'myDesiredMethod' for MyModule::RuDecoder:Class
。似乎jruby
没有寻找父class 的方法。
我的情况有什么解决办法吗,我不想每次有更新时将java库重建为jar并手动将其放入我的程序中。
原来我把事情搞得太复杂了。我可以调用 Annotator
的默认构造函数,如下所示:
constructors = Annotator.java_class.declared_constructors.first
constructors.accessible = true
annotator = constructors.new_instance.to_java
并使用简单调用 myDesiredMethod
:annotator.myDesiredMethod
我正在使用 Java 命令行应用程序(它是开源的)作为我的 jrubyonrails
项目的 jar 文件。主要应用如下
public class Decoder extends Annotator {
public Decoder() {
super();
}
public static void main(String[] args) {
... // Do something that I don't want
myDesiredMethod();
... // And some other thing
}
...
}
我想跳过很多步骤,我只想要 myDesiredMethod
功能。它是来自父 Annotator
class.
protected
方法
public class Annotator extends Helper {
...
protected SomeClass myDesiredMethod(boolean reMap) throws Exception { ... }
...
}
Annotator
class 没有任何 public 构造函数,所以我不能:
ann = Annotator.new
它引发了这个错误:TypeError: no public constructors for Annotator
。
然后我尝试实现另一个继承 Annotator
的 class 以访问 myDesiredMethod
。这是我目前试过的jruby
代码
require 'java'
require 'decoder.jar'
java_import java.util.ArrayList
java_import java.lang.StringBuilder
module MyModule
class RuDecoder < Annotator
include_package 'com.decoder'
def self.my_method
myDesiredMethod
end
end
它 returns 错误:NoMethodError: undefined method 'myDesiredMethod' for MyModule::RuDecoder:Class
。似乎jruby
没有寻找父class 的方法。
我的情况有什么解决办法吗,我不想每次有更新时将java库重建为jar并手动将其放入我的程序中。
原来我把事情搞得太复杂了。我可以调用 Annotator
的默认构造函数,如下所示:
constructors = Annotator.java_class.declared_constructors.first
constructors.accessible = true
annotator = constructors.new_instance.to_java
并使用简单调用 myDesiredMethod
:annotator.myDesiredMethod