Jython调用带boolean参数的Java方法时匹配错误方法问题咨询
解决Jython调用Java重载方法时布尔值匹配错误的问题
问题场景
我有一个包含重载方法的Java类,分别接收int和boolean类型参数:
public class TestOverload { public String process(int num) { return String.valueOf(num); } public String process(boolean flag) { return String.valueOf(flag); } }
使用Jython调用该类的process方法并传入True时,会意外匹配到接收int参数的方法,返回结果为"1",而非预期的"true"。
原因分析
Python中的bool类型是int的子类(True等价于1,False等价于0),Jython在进行Java方法重载解析时,会优先匹配父类类型对应的方法,因此布尔值会被当作int类型处理,导致匹配错误。
无需修改方法名的解决方案
显式转换为Java原生布尔类型
在Jython调用时,将Python布尔值转换为Java的Boolean类型,强制指定参数类型,让重载解析匹配到正确的方法:
from TestOverload import TestOverload from java.lang import Boolean obj = TestOverload() # 显式传入Java Boolean类型的TRUE常量 result = obj.process(Boolean.TRUE) print(result) # 输出 "true"
利用Jython的类型绑定特性
也可以通过Python布尔值的__jtype__属性构造对应的Java原生类型:
obj = TestOverload() # 通过__jtype__构造Java布尔值 result = obj.process(True.__jtype__(True)) print(result) # 输出 "true"
以上两种方式都不需要修改Java类的方法名称,仅在Jython调用端做类型控制即可解决匹配错误问题。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

