我现在是一名新的RPG-Dev大约一年了,在某种程度上也了解Java.我与这个BIF挣扎了几天,但我没有找到任何有用的东西. 以下是IBM DOC示例,它不适用于我:

%THIS IBM

我能够调用Java类构造函数和类方法.

     D* Java String 
     DstringClass      C                   'java.lang.String'
     DJAVA_STRING      S               O   CLASS(*JAVA:stringClass)
     DnewString        PR              O   EXTPROC(*JAVA:stringClass
     D                                            :*CONSTRUCTOR)
     Dvalue                       65535A   VARYING CONST
     DJAVA_toString    PR                  LIKE(Java_STRING)
     D                                     EXTPROC(*JAVA:stringClass
     D                                             :*CONstrucTOR)
     D value                      65535A   VARYING CONST
     DgetBytes         PR                  LIKE(NAME)
     D                                     EXTPROC(*JAVA:stringClass
     D                                             :'getBytes')
     Dvalue                       65535A   VARYING CONST
     D* Java Employee 
     DnewEmp           PR              O   EXTPROC(*JAVA:'Employee':
     D                                             *CONSTRUCTOR)
     D id                            10I 0 VALUE
     D name                            O   CLASS(*JAVA:stringClass)
     D VCUS                          10I 0 VALUE
     D VCU                           10I 0 VALUE
     D
     Demployee         S               O   CLASS(*JAVA:'Employee')
     D
     DvacationDays     PR            10I 0 EXTPROC(*JAVA:'Employee'
     D                                                  :'vacationDays')
     DgetId            PR            10I 0 EXTPROC(*JAVA:'Employee'
     D                                                  :'getId')
     DRTNNR            S             10I 0
     DNAME             S             10A
     D
     C                   EVAL      JAVA_STRING = JAVA_toString('John')
     C                   EVAL      employee = newEmp(123:JAVA_STRING:15:10)
     C                   EVAL      RTNNR = vacationDays(employee)
     C                   SETON                                        LR
     C
     PvacationDays     B                   EXPORT
     DvacationDays     PI            10I 0
     DidNummer         S             10I 0
     C
     C                   EVAL        idNummer = getId(%THIS)
     C                   RETURN      idNummer
     PvacationDays     E           

Java类:

public class Employee{  
    private int id;
    private String name;
    private int vacationUnspent;
    private int vacationUsed;
    
// Constructor
  
// Getter + Setter

// Methods
    public int vacationDays(Employee employee){
        final int vacation;
        vacation = this.vacationUnspent - this.vacationUsed;    
        return vacation;
    }
}    

我能够编译这两个文件并运行它,直到RTNNR=VAvationDays(Employee),在那里我收到错误消息:RNX0301 "java.lang.NoSuchMethodError:Employee.vocationDays()I"

so I did "javap -s Employee" in the Qshell: public int vacationDays(Employee);
descriptor: (LEmployee;)I

因此,我显然不想进入Java类,而是使用我的RPG程序中的方法来使用%this BIF.而且,当vocationDays()为空时,我无法编译RPG程序.它想要一个物体在里面. IBM的例子没有显示假期的调用,这有点令人恼火,所以我不得不做很多假设.

提前谢谢您.

我试图重新创建IBM示例,以及一些关于如何在RPG中调用Java方法的更普通的示例.后者奏效了.我能够进入Java类及其方法并返回结果,这是我所期望的.我在网上找不到%这个的其他例子,我公司的其他开发人员也从来没有用过它.

推荐答案

在Java类中,您必须将该方法定义为本机方法.

public native int vacationDays(Employee employee);

https://www.ibm.com/docs/en/i/7.2?topic=java-rpg-native-methods

RPG过程必须位于服务程序中,并且Java类必须加载服务程序,以便Java可以调用本机方法.

Java相关问答推荐

将状态栏和导航栏设置为白色,带有深色文本

我们如何直接使用kerminldap服务票证来通过ldap进行身份验证并形成LDAP上下文

Jooq隐式地将bigint转换为数字,并且索引不起作用

为什么JFrame paint()多次绘制同一点(或根本不绘制)?

Java 22模式匹配不适用于记录模式匹配.给出汇编问题

';com.itextpdf.ext.html.WebColors已弃用

对某一Hyroby控制器禁用@cacheable

如何找到MongoDB文档并进行本地化?

为什么不应用类型推断?

测试期间未执行开放重写方法

生成桥方法以解决具有相同擦除的冲突方法

%This内置函数示例

有谁能帮我修一下这个吗?使输出变得更加整洁

是否有一个Java Future实现可以在池繁忙时在调用者线程中执行?

在Java泛型中使用通配符时,如何推断类型

Java嵌套流查找任意值

H2数据库仅支持%1个结果集?

javax.crypto-密码对象-提供者服务是如何工作的?

当我将鼠标悬停在javafxTextArea上时,如何更改鼠标光标?

";重复键的值提示唯一约束«;livre_genre_pkey»";例外