3

我需要开发只能实现一次的接口。如果其他类尝试在同一个项目中实现相同的接口,则不应允许或给出错误。

interface A {
   void someMethod();
}

class B implements A {
    void someMethod() {
        // implementation here
    }
}

现在我想限制其他类实现接口A

class c implements A { //this  should not allowed in this project
}

有可能开发这种接口吗?任何人都可以建议,我该如何实现这一目标?

4

5 回答 5

3

简单的答案,不,如果您的界面是公共/包保护的,那是不可能的。

于 2012-09-13T05:35:57.160 回答
2

这违背了接口的目的。如果你只打算有一个实现,它也可能是具体的。

接口意味着由多个类实现。这使您可以切换实现,而不必担心它们的实现细节。例如,接口最常见的用途是与集合框架一起使用,特别是ListSetMap

// Hides the implementation details of ArrayList within a List variable
List<String> strs = new ArrayList<String>();
// Hides the implementation details of LinkedList within the same List variable
strs = new LinkedList<String>();
// All code using strs is agnostic to what kind of list it is (mostly)
strs.add("Hello, Dolly");
System.out.println(strs.get(0));

接口主要体现了两个 OOP 概念:封装多态。如果您不打算使用界面来完成这两件事之一,请不要使用界面。只需使用具体(非抽象)类。在这一点上使用接口是多余的。

我能想到的唯一例外是当你想使用 Java 的Proxy类时。只有这样才能接受 1:1 的接口:类比率,因为您必须有一个接口才能将实现包装在Proxy实例中。

于 2012-09-13T05:46:22.080 回答
1

听起来您的设计是错误的,您的界面实际上应该只是class B.

接口的重点是它允许同一组方法的不同实现,您在此处试图避免这种情况。

于 2012-09-13T05:43:36.733 回答
0

把你interface Aclass B放在同一个包里。

所有不应该实现的类都A应该在这个包之外。

于 2012-09-13T05:39:54.387 回答
0

了解实现的唯一全局方法A是它们是否向您注册,这是没有意义的,您可以忘记这一点。


我不确定您是否要求您使用的所有实例A除了 之外还有一个共同的类Object.class,或者它们的类是相同的,或者它们的类是B.class.

无论您要强制执行什么,您都需要在通过的实例上测试不良情况,您与无论如何都不A使用的实例无关。A

或者,对于A您通过的每个实例,您可以创建一个新的B并插入您需要的数据A


但首先,您应该考虑为什么要这样做,当A.

于 2016-06-01T14:58:58.757 回答