非抽象且不覆盖抽象方法 - IDL
Posted
技术标签:
【中文标题】非抽象且不覆盖抽象方法 - IDL【英文标题】:Not abstract and does not override abstract method - IDL 【发布时间】:2015-04-17 04:33:52 【问题描述】:我正在使用 Java 开发 CORBA 应用程序。我正在使用“idlj”来生成存根和骨架。编译时出现此错误。
Account.java:12: 错误:Account 不是抽象的并且不会覆盖 Servant 中的抽象方法 _all_interfaces(POA,byte[]) 公共类 Account 扩展 org.omg.PortableServer.Servant ^ 注意:SMTS/AccountPOA.java 使用未经检查或不安全的操作。
这些是类定义和idl定义。
SMTS.idl 文件
module SMTS
interface Account
attribute string accountID;
attribute double balance;
void setAccountID(inout string accid);
void setBalance(inout double value);
;
;
Account.java 类
public class Account extends AccountPOA
private ORB orb;
private String accountID;
private double balance;
public void setORB(ORB orb_val)
orb = orb_val;
public void setAccountID(String accid)
this.accountID = accid;
public void setBalance(double value)
this.balance = value;
【问题讨论】:
AccountPOA 中的内容看起来像是扩展了另一个类“Servant”,它是一个抽象类,并未在 Account 或 AccountPOA 中完全定义。 【参考方案1】:AccountPOA
类或其超类之一具有一个或多个尚未被覆盖的抽象方法。如果你扩展一个包含抽象方法的抽象类,你必须重写所有的抽象方法。唯一的例外是你的类本身是抽象的。只要您有一个可以实例化的具体类(=非抽象类),您必须覆盖所有抽象方法。
所以,看看AccountPOA
的代码以及它扩展或实现的所有类和接口。必须有一个抽象方法在类层次结构中未被覆盖。
【讨论】:
以上是关于非抽象且不覆盖抽象方法 - IDL的主要内容,如果未能解决你的问题,请参考以下文章