问题标签 [interface]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
15 回答
196351 浏览

java - 我们应该@Override 接口的方法实现吗?

实现接口方法的方法应该用 注释@Override吗?

注释javadocOverride说:

表示方法声明旨在覆盖超类中的方法声明。如果一个方法被这个注解类型注解但没有覆盖超类方法,编译器需要生成一个错误信息。

我不认为接口在技术上是超类。或者是吗?

Question Elaboration

0 投票
6 回答
19849 浏览

class - 接口契约,类对象?

接口的契约是对象与类的契约吗?

从代码到执行代码,有什么需要区分这样的相同事物?我有点理解将类命名为类并将实例化的执行类命名为对象的想法,但总的来说,这是这些半冗余术语的唯一原因吗?

0 投票
3 回答
24510 浏览

c# - 将对象转换为通用接口

我有以下界面:

以及一堆(应该)实现它的类,例如:

我意识到这三个是不一样的:

但尽管如此,我需要一种方法来处理所有不同的类,比如 AdminRateShift(和 FXRateShift、DetRateShift),它们都应该实现 IRelativeTo。假设我有一个将 AdminRateShift 作为对象返回的函数:

通过针对接口进行编程,我可以做我需要做的事情,但我实际上不能将 Object 强制转换为 IRelativeTo 所以我可以使用它。

这是一个微不足道的例子,但我希望它能阐明我想要做什么。

0 投票
9 回答
1902 浏览

naming-conventions - 接口是否有 ISomething / ISomethingable 的替代方案?

使用 I 作为接口名称前缀的 .NET 标准似乎越来越普遍,并且不再仅限于 .NET。我遇到了很多使用这种约定的 Java 代码(所以如果 Java 在 C# 之前使用它,我不会感到惊讶)。Flex 也使用它,等等。不过,在名称的开头放置一个 I 有点匈牙利符号的味道,所以我对使用它感到不舒服。

所以问题是,是否有另一种方式来表示Something 是一个接口,而不是一个类,并且无论如何都需要这样表示它。还是它成为一个标准,所以我应该接受它并停止试图通过建议以不同的方式来挑起“宗教战争”?

0 投票
5 回答
2114 浏览

javascript - 在 JavaScript 中是否有“正确”的继承方式?如果是这样,它是什么?

我一直在尝试学习如何向现有代码添加测试——目前正在阅读有效地使用遗留代码。我一直在尝试在 JavaScript 中应用一些原则,现在我正在尝试提取一个接口。

在寻找用 JavaScript 创建接口的过程中,我找不到很多东西——而我发现的关于继承的东西似乎有几种不同的方式。(有些人创建自己的基类以提供有用的方法,使继承更容易,有些人使用函数,有些人使用原型)。

什么是正确的方法?有一个在 JavaScript 中提取接口的简单示例吗?

0 投票
7 回答
25034 浏览

python - Python继承 - 如何禁用函数

在 C++ 中,您可以通过在子类中将其声明为私有来禁用父类中的函数。如何在 Python 中做到这一点?IE 如何从孩子的公共界面隐藏父母的功能?

0 投票
4 回答
442 浏览

.net - .NET:使用配置文件选择具体类

(这个问题专门在 C# 中,但一般适用于 .NET)

我有一个大型应用程序,它的设计相当不错,并且通过接口分为主要部分(这样做是为了帮助并行开发)。

我们现在有一组主要的具体类来实现所需的接口,但我们也有额外的具体类集用于替代情况和测试。

目前,我们将所有这些类放在代码的顶层:

如果我想换出组件,那么我只需要更改该行并重新编译:

这很好用,但显然需要重新编译——我宁愿使用配置文件中的值选择具体类。

使用配置文件更改具体类的标准模式是什么?有没有我可以使用的标准库来为我解决这个问题?

谢谢!

0 投票
6 回答
17380 浏览

excel - 如何以编程方式连接 Excel 电子表格?

我有一个使用Excel 作为数据库并希望通过真实数据库对 Excel 数据进行一些工作的组织请求一些合同工作。(是的,我知道,没关系……)

客户有一个 Excel 表,他们在内部使用它来跟踪一些政府计划。此 Excel 表中的数据过去通过 CSV 作为中间格式手动导入 SQL 数据库,并通过一个小型 Web 应用程序提供。电子表格或数据库中的更改都是手动完成的(由不同的人),并且必须手动保持同步。

新功能的规范包括:

  • 将 Excel 文件上传到 Web 应用程序
  • 通过网络应用程序进行微小的更改(当然,这一点很简单)
  • 偶尔将数据导出回 Excel

电子表格(实际上,它是工作簿中的几个)实施了与其他机构交互所必需的一些准则,因此在导入之前和之后必须在结构上保持相同。它包含大量格式设置、隐藏列和排序按钮,以及不同工作表中单元格之间的大量数据链接。

我不想从头开始复制电子表格来提供导出,也不想在导入之前手动将正确的列提取到 CSV 中。我宁愿寻找一种方法来加载 Excel,“查询”某些字段,将它们写入数据库,然后从数据库中加载数据并仅操作正确单元格的内容。

有没有办法以编程方式与现有电子表格进行交互,并且只读取或更改您需要的位?

0 投票
4 回答
2215 浏览

java - 接口的骨架实现中的抽象方法

我正在重新阅读 Effective Java (2nd edition) item 18, prefer interfaces to abstract classes。在该项目中,Josh Bloch 提供了Map.Entry<K,V>接口的骨架实现示例:

这个例子有两个问题:

  1. 为什么这里将 getKey 和 getValue 显式声明为抽象方法?它们是Map.Entry接口的一部分,所以我看不出抽象类中冗余声明的原因。
  2. 为什么要使用将这些原始方法(正如 Bloch 先生所说的那样)保留为抽象的习语?为什么不这样做:

    // 骨架实现 public abstract class AbstractMapEntry implements Map.Entry { private K key; 私人V值;

    }

这样做的好处是每个子类不必定义自己的字段集,并且仍然可以通过其访问器访问键和值。如果子类确实需要为访问器定义自己的行为,它可以直接实现 Map.Entry 接口。另一个缺点是在骨架实现提供的 equals 方法中,抽象访问器被调用:

Bloch 警告不要从为继承而设计的类中调用可覆盖的方法(第 17 项),因为它会使超类容易受到子类所做更改的影响。也许这是一个见仁见智的问题,但我希望确定这个故事是否还有更多内容,因为布洛赫在书中并没有真正详细说明这一点。

0 投票
4 回答
452 浏览

vb.net - 这个属性应该是我的对象接口的一部分吗?

我有一个名为“IsSecureConnection”的属性,它是我的对象接口的一部分。这对于接口的大多数实现都是有意义的,但是,在某些实现中,我想将属性设为 ReadOnly。

即使所有实现都需要它(尽管有时略有不同),我是否应该从对象的接口中省略此属性?

谢谢!