【问题标题】:How to Cast Object in Jpype Python如何在 Jpype Python 中转换对象
【发布时间】:2016-03-27 10:11:05
【问题描述】:

我有一个方法,它需要:“java.io.Reader”作为参数 java.io.Reader 是一个接口,不能被实例化。

所以,我使用这样的一个子类: StringReader= jp.java.io.StringReader("teststring")

如何将 StringReader 转换为 java.io.Reader 类型?

因为方法不能隐含。

编辑:使用该方法时收到此错误消息:

   txt= u'gfdgfdgddf'
   StringReader = jp.JClass('java.io.StringReader')(txt)
   StringReader.ready()  #Ok works
   userDicC= jp.JClass('org.apache.lucene.analysis.ja.dict.UserDictionary')
   useDic= userDicC(StringReader)

方法详情: public static UserDictionary open(Reader reader) 抛出 IOException

我收到了这个错误:

userDicC=java.jp.JClass('org.apache.lucene.analysis.ja.dict.UserDictionary') useDic= userDicC(StringReader)

    line 84, in _javaInit
    self.__javaobject__ = self.__class__.__javaclass__.newClassInstance(*args)

   RuntimeError: No matching overloads found. at  src\native\common\jp_method.cpp:121

【问题讨论】:

  • 您认为为什么需要投射对象?如果您将StringReader 传递给您说需要java.io.Reader 的方法会发生什么?
  • 因为我收到了错误信息:
  • 那条错误信息是什么?请编辑您的问题以包含此消息。
  • 你调用的是什么方法?它采用什么参数类型以及为任何其他参数传递什么值?我问这个的原因是我尝试从StringReader 创建一个BufferedReader 并且有效。
  • 我把apache方法放到代码里了

标签: java python casting jpype


【解决方案1】:

从 cmets 发现问题与投射对象根本无关。

调用public static UserDictionary open(Reader reader)方法需要换行

useDic= userDicC(StringReader)

useDic= userDicC.open(StringReader)

前一行将不起作用,因为在 Lucene-Kuromoji 版本 5.5.0 中,UserDictionary 类没有声明公共构造函数。 (该类确实有一个私有构造函数,它接受一个List<String[]> 参数,静态open 方法调用它。)

令人困惑的是,这个类的旧版本,例如 Lucene-Kuromoji 的 5.0.0 版本,do 声明了一个带有单个 Reader 参数的构造函数。我希望您的代码能够与该版本的 Lucene-Kuromoji 一起使用。

【讨论】:

    猜你喜欢
    • 2012-02-25
    • 2013-07-13
    • 2019-12-18
    • 1970-01-01
    • 2022-09-24
    • 2016-05-18
    • 2023-03-27
    • 2021-08-09
    • 2019-11-01
    相关资源
    最近更新 更多