首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问Java文件类的保护方法

如何访问Java文件类的保护方法
EN

Stack Overflow用户
提问于 2017-11-07 16:15:23
回答 1查看 614关注 0票数 1

我正在使用一个Java命令行应用程序(它是开源的)作为我的jrubyonrails项目的jar文件。主要应用程序如下

代码语言:javascript
复制
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函数。它是来自父protected类的一个Annotator方法。

代码语言:javascript
复制
public class Annotator extends Helper {
...
  protected SomeClass myDesiredMethod(boolean reMap) throws Exception { ... }
...
}

Annotator类没有任何公共构造函数,因此我不能:

代码语言:javascript
复制
ann = Annotator.new

它会引发以下错误:TypeError: no public constructors for Annotator

然后,我尝试实现另一个继承Annotator的类,以访问myDesiredMethod。这是我迄今为止尝试过的jruby代码

代码语言:javascript
复制
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

它返回错误:NoMethodError: undefined method 'myDesiredMethod' for MyModule::RuDecoder:Class。似乎jruby不寻找父类的方法。

在我的例子中,有什么解决方案吗?我不想每次更新时都重新构建java库,然后手动将它放到我的程序中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-08 10:30:26

结果我把事情搞得太复杂了。我可以按以下方式调用Annotator的默认构造函数:

代码语言:javascript
复制
  constructors = Annotator.java_class.declared_constructors.first
  constructors.accessible = true
  annotator = constructors.new_instance.to_java

并使用简单调用myDesiredMethodannotator.myDesiredMethod

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47162597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档