【问题标题】:Force signature for couple of methods in class类中几个方法的强制签名
【发布时间】:2014-04-06 13:57:03
【问题描述】:

是否可以对类中的几个方法强制签名?

假设我有InterfaceMyInterface:

public interface MyInterface
{
    public void method(int a);
}

我想在MyInterfaceClass 类中实现MyInterface,使MyInterfaceClass 中的每个方法都具有相同的签名?

public class MyInterfaceClass implements MyInterface
{
    public void method_A(int a) { /*something */ }
    public void method_B(int a) { /*something */ }
    public void method_C(int a, int b) { /*something */ } // ERROR cause of signature, won't compile
}

我在MyInterfaceClass 中有未知数量的方法。

【问题讨论】:

  • 所以你想要一个类,其中每个方法都具有与它实现的接口中的单个方法相同的签名?对我来说,这听起来像是一项需要反思的工作......
  • 如果唯一的区别是参数的长度,您可以考虑使用可变参数。
  • 要“强制”您以这种方式声明的方法的签名。在上面的代码示例中,MyInterfaceClass 无法编译的唯一原因是您没有定义method(int a)。与method_C无关。
  • 这对我来说似乎是一个 XY 问题。你有一个问题 (X),你认为你可以通过某种方式解决它,但这会导致一个新问题 (Y)。如果你不说出你真正想要什么,任何人都无法在这里帮助你。
  • @hudac 这就像问你是否可以用螺丝刀切割一块木头。如果这是你的目标(为了好玩、出于好奇或其他),答案确实是:不。但是,如果您的目标是切割木材,答案是:使用不同的工具。所以如果你坚持你的要求,答案是:你不能强制执行这样的课程。如果您有实际用例,则很可能有解决方案。

标签: java inheritance interface abstract-class


【解决方案1】:

我不能确切地知道你在这里的目的是什么?在java中,方法的签名由6个因素组成:

  1. 隐私级别(公共、私人等)
  2. 返回类型
  3. 方法名称(区分大小写)
  4. 参数(类型和位置,method_a(int a, String b) != method_a(String b, int a))
  5. 检查异常列表

如果您希望在接口中实现该方法,则必须符合所有这些条件,包括名称。此外,在一个类中,您只能实现一次接口的方法。如果您尝试两次实现具有相同参数、名称、隐私级别等的方法......那么您的类将无法编译。如果你在同一个类中实现了两次,java虚拟机怎么知道调用哪个方法?

为什么要在一个类中实现相同的方法两次?也许您正在尝试改进您的设计,但您问错了问题?

【讨论】:

  • 我想创建一个类,它的方法遵循规则:它们具有相同的隐私级别、相同的返回类型、相同的参数、相同的检查异常列表。它们之间唯一不同的是名字......
  • 您绝对可以实现具有这些相似性的多种方法。但是,如果您希望实现一个没有接口的方法,那么您必须具有与接口方法相同的参数、异常、返回类型(等)和相同的名称。
【解决方案2】:

在上面的代码示例中,MyInterfaceClass 无法编译的唯一原因是您没有定义方法(int a)。与method_C无关。

当您采用接口时,您必须实现接口中的每个方法(除非您正在创建抽象类)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-08
    • 2019-08-14
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多