问题标签 [marker-interfaces]

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 投票
4 回答
453 浏览

oop - 使用没有方法的接口

我已将真实代码简化为说明这一点的最小示例。请原谅缺少 setter/getter 等。

想象一下,我们有几个客户按顺序浏览的网页。这里的用例是:-

  • 用户选择他们想要的书
  • 用户选择是否希望通过邮寄或电子邮件发送它以及相关的详细信息
  • 系统完成订单

这个问题集中在两种交付方式上。这被建模如下:

现在,为了表示用户在浏览页面时输入的信息,我们有这个类:

当用户浏览网页时,信息存储在PurchaseData. 如果用户返回一个页面,我们可以向他们展示他们之前输入的内容。在用户确认并交付图书后,引用ordeliveryDetails的一个实例。PostalDeliveryDetailsEmailDeliveryDetails

总之,当用户确认他们的信息时:

Delivery接口没有方法让我很困扰。

这是由于电子邮件和邮政投递之间的差异造成的。

我认为这DeliveryDetails.deliver()不是一个好方法,因为这会强制实现静态获取诸如 SMTP 服务器地址之类的东西。这会混淆关注点(管道与用户输入的信息)。

如果您必须存储任意类型的东西,泛型可能很有用。无法使用泛型 ( PurchaseData<T extends Delivery>),因为在创建 PurchaseData 实例时不知道交付类型。无论如何,这对工厂没有帮助。

这个空界面可以吗?有没有更好的方法来设计这段代码?

0 投票
2 回答
823 浏览

java - 标识对象功能的标记接口或布尔方法?

我正在开发一个较大的 Java 类层次结构,其中一些具有我有兴趣在运行时查询的特定属性(该属性绝对仅适用于类,而不适用于特定实例)。

我可以创建一个isFooBar()子类可以实现的抽象布尔方法来指示属性是否存在:

或者,我可以使用标记界面FooBarProperty并对界面进行instanceof检查:

或者我猜你甚至可以使用 AmitD 建议的注释:

每种方法的优缺点是什么,通常应该首选哪种方法?

0 投票
6 回答
5106 浏览

java - 标记接口

有人可以解释一下java中标记接口的合同吗?

例如:如果Clonable是一个没有字段/方法的标记接口,那么clone()定义在哪里?

为什么我们要在使用Clonable时实现 i/f clone()

那么我的问题是,如果clone()java.lang.Object类的方法,为什么要实现Clonablei/f 来覆盖clone().

有人可以详细说明 java 的这种约定吗?

提前致谢

0 投票
3 回答
2523 浏览

java - How is the Comparable interface is marker interface, with its compareTo() method?

How is the Comparable interface is marker interface, even though it defines a compareTo() method? Please explain detail.

0 投票
2 回答
1129 浏览

java - 创建标记接口并序列化对象

我已经看到了像serializabledecompiler 这样的标记接口以及像objectInputStreamand类这样的类objectOutputStream。我的问题是我们可以创建自己的标记界面吗?

如果是,那么我想做一些特别的事情说我也想序列化对象相同的序列化机制,但通过我的接口。

我交叉检查的是,objectOutputStream他们正在检查以下运算符的实例writeobject()

请告诉我如何制作标记接口以及如何创建自己的类来实现我的标记接口并进行特殊的序列化处理?

0 投票
2 回答
1810 浏览

java - 注释可以完全取代标记接口吗?

由于标记接口主要用于标记一个类,因此可以通过注释来实现相同的目标。比如Cloneable接口可以@Cloneable

那么是否仍然需要标记接口或者可以通过注释来替代?使用其中任何一个有什么优点/缺点吗?我的意思是更喜欢一个而不是另一个?

0 投票
9 回答
34532 浏览

java - Java:什么可以序列化,什么不能序列化?

如果Serializable接口只是一个用于传递某种关于java类的元数据的标记接口- 我有点困惑:

看了java的序列化算法的流程(元数据自下而上,然后实际实例数据自上而下),实在无法理解通过那个算法不能处理哪些数据。

简而言之,正式:

  1. 哪些数据可能导致NotSerializableException?
  2. 我怎么知道我不应该implements Serializable为我的班级添加条款?
0 投票
5 回答
3988 浏览

java - 空值与标记接口

谁能详细说明Java中Null接口和Marker接口之间的核心区别是什么。我在一次采访中被问到这个问题。

谢谢。

0 投票
2 回答
399 浏览

c# - 标记接口:使它们可相互转换

我为 fluent API 的扩展方法提供了三个标记接口:

以及以下扩展方法:

问题:是否有可能在不强制转换的情况下返回 obj ?通常,在这种情况下您需要显式地向下转换,但是,这些接口都不需要底层对象具有任何类型的方法/属性/任何东西。

注意:实际的实现类实现了所有的接口。

问题 2:为什么正在实施IOneITwo不是自动让实施也属于类型IOneOrTwo

0 投票
1 回答
86 浏览

c# - 如何实现INamingContainer,告诉我一些更深的东西

如果我想实现一个自定义容器控件,我必须保持我的控件继承自 INamingContainer,它是一个接口被定义为一个标记接口。据我所知,这将使 CLR 创建控制语句成为属性的元数据。

所以,我想知道:

  1. .net 框架系统是否只为自己的标记接口创建了元数据?我可以创建一个标记界面吗?

  2. 当 CLR 编译器编译从 INamingContainer 继承的控件时会发生什么?

  3. INamingContainer 用于容器控制的作用是什么?

提前谢谢!</p>