- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
在 Java 中,人们经常将接口(interface)与类一起定义,并在可能的情况下使用接口(interface)名称而不是类名称,以便以后允许新的实现。这里的逻辑接口(interface)是重复的。
如果 Java 允许使用一个类作为接口(interface),这种“以防万一”的复制就没有必要了,例如:class MyScanner extends MyStuff implements java.util.Scanner
。这也将缓解我需要提供类类型但我不想扩展该类的情况。
据我所知,“实现一个类”不仅会被编译器拒绝,也会被 JVM 拒绝(如果我将此声明修改到类文件中)。这是否存在一些技术困难或者它不被认为是重要的事情?它看起来不像是向后兼容性问题(我的意思是,如果 JVM 支持的话,旧代码可以正常运行)。
编辑:为了澄清,我将在这里复制 StriplingWarrior 对相同问题的更好措辞:
Why can't a class "implement" another class's method contract without actually extending that class? Is it a technical issue? Would it somehow open us up to some issues that the OP can't foresee?
最佳答案
我对 MyClass implements AClass
的理解正确吗?将意味着 MyClass
必须为 AClass
的所有公共(public)方法提供(或继承)实现拥有? IE。每个类都隐式定义了一个由其公共(public)方法组成的接口(interface)?
如果是这样,那么我看到的问题是接口(interface)确实与类非常不同,两者不应该那样混合。接口(interface)定义契约,类定义实现。其结果是:类的功能可以相对自由地扩展,但不能与现有实现接口(interface)。
所以你有一个非常具体的理由来解释为什么你的建议不好:你永远不能将任何公共(public)方法添加到任何类而不冒破坏一些代码的风险 implements
那个类。
另一方面,它会解决什么问题?当你有一个单一实现的接口(interface)时代码重复?不做就解决这个问题怎么样?在我看来,这通常是人们在使用无法模拟具体类的过时模拟框架时教条地进行 TDD 的人所做的事情。
关于java - 为什么我不能用 Java 写 "implements AClass"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4696528/
这个问题已经有答案了: What is PECS (Producer Extends Consumer Super)? (16 个回答) 已关闭 3 年前。 根据我的理解(显然需要更正), map 应
class A: @property def p(self): return 2 def q(self): return 2 a = A() A.p(a) #>> TypeError: '
在 Java 中,人们经常将接口(interface)与类一起定义,并在可能的情况下使用接口(interface)名称而不是类名称,以便以后允许新的实现。这里的逻辑接口(interface)是重复的。
所以基本上在我的应用程序委托(delegate)中我有一个 navigation.controller 此导航 Controller 有一个名为 MainScreen 的类的 View 。 在 Mai
这个问题结合了unique_ptr as class member and move semantics fail to compile with clang和 C++ std::vector in
尝试编写 python 包,但无法在我的源文件之一中创建类的实例。 包布局是: -packagedir ----README.md ----setup.py ----packagename -----
我在 springboot 中使用 @Cacheable 并实现 Cache 接口(interface),覆盖以下函数: public String getName() public Object
这个问题在这里已经有了答案: How do I resolve "ambiguous use of" compile error with Swift #selector syntax? (3 个答
谁能告诉我 我使用这个方法“[aClass respondsToSelector:@selector(fun)]”来查找任何类(class)中是否有乐趣 但是当 fun 有三个参数时我该如何处理呢??
我是一名优秀的程序员,十分优秀!