问题标签 [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 回答
1185 浏览

java - jvm在java中对标记接口做了什么

正如问题所说,JVM 对实现 Marker 接口的类给予了额外的处理。例如,我使用 Serializable 对其进行了测试,如下所示:

导入java.io.*;

我发现 jvm 给出的异常为 java.io.NotSerializableException 但是文件是在给定的路径上创建的,类似的反序列化异常。那么为什么JVM要求它被序列化,它可以直接允许创建一个序列化。?

0 投票
1 回答
210 浏览

java - 用户定义的标记界面有什么用途,它是如何工作的?

用户定义的标记界面有什么用途,它是如何工作的?在已经定义的标记接口(例如可序列化或可克隆)的情况下,JVM 会进行一些内部处理,但是对于用户定义的标记接口,JVM 的行为如何?

0 投票
10 回答
98827 浏览

java - Java中的标记接口?

我被告知 Java 中的 Marker 接口是一个空接口,用于向编译器或 JVM 发出信号,即必须以特殊方式处理实现此接口的类的对象,例如序列化、克隆等。

但最近我了解到它实际上与编译器或 JVM 无关。例如,在Serializable接口的情况下,方法writeObject(Object)ObjectOutputStream检测instanceOf Serializable类是否实现Serializable并相应地抛出NotSerializableException。一切都在代码中处理,这似乎是一种设计模式,所以我认为我们可以定义自己的标记接口。

现在我的疑问:

  1. 上面第一点提到的标记接口的定义是错误的吗?那么我们如何定义一个 Marker 接口呢?

  2. 而不是使用instanceOf运算符,为什么该方法不能类似于writeObject(Serializable)编译时类型检查而不是运行时?

  3. 注释比标记接口好在哪里?

0 投票
4 回答
1622 浏览

java - 像可序列化这样的标记接口可以包含默认方法吗?

我认为不能,因为标记接口原则是没有任何方法,但由于默认方法不是抽象的,我不确定。

0 投票
1 回答
77 浏览

c# - 通过包装器传递类元数据

我想看看是否有办法让包装类在运行时将属性附加到自身,或者任何其他方式从包装类继承某些元数据。

我希望这不会太长,但这就是我所拥有的:

首先有一个特定的类表示要发送到设备的命令:

可以从应用程序的各个地方向设备发送命令,但是有些命令比其他命令更重要,所以我还定义了一个标记接口IPriorityCommand,指示应该立即发送该命令:

然后我的命令调度程序会检查这个:

此外,有时可能需要包装命令以稍微更改其内容,或添加一些其他功能:

但是现在我的问题是包装器实例不再实现优先级命令。另外,我有几种包装器类型,因此每个包装器都有两个版本是没​​有意义的,只是它们的接口不同。

我也可以使用属性而不是接口,但我不知道如何在运行时设置对象的属性,如果可能的话。

另一个问题是这些命令包装器中的一些是通用的,即定义在一个对IPriorityCommand.

0 投票
4 回答
2063 浏览

java - Marker接口和空接口的区别?

每个 Marker 接口都是一个空接口。反之亦然吗?

0 投票
1 回答
685 浏览

java - 使用 out.writeObject(object) 时出现序列化错误

我正在研究标记接口的行为,我使用以下链接制作了自己的标记接口,

关联

然后我比较 Serializable 接口的功能。

现在我有不扩展可序列化接口的 Employee 类

然后我有另一个类 SerializeDemo 试图序列化对象

现在,当我删除 ERRORLINE 行时,它会编译并创建一个新文件,但没有对象。我只是想知道如何 out.writeObject(e); 导致错误,ObjectOutputStream 是实现 Serializable 接口还是扩展到其他实现 Serializable 接口的类。

如何out.writeObject(e); 内部检查它是否可序列化?

任何帮助将不胜感激!

0 投票
0 回答
108 浏览

java - 用于在 Java 集合中存储不同对象的标记接口

我正在用 Java 实现一个带有一堆目标的线性规划器。出于这个原因,我使用了一个堆栈,我需要在其中存储不同的对象:谓词、运算符、状态。为此,我创建了一个名为 Stackable 的接口,因此我有一个Stack<Stackable>. 这个接口是空的,因为所有可堆叠的对象都没有任何共同点,除了它们都必须堆叠。

由于我不喜欢空界面的想法,因此我开始阅读并遇到了Marker interface一词,我认为这是我的 Stackable 的情况。我也发现一般都可以用注解代替,但是我没用过,不知道能不能解决我的问题。

这就是为什么我想知道:

  1. 我的设计是否有更好的替代方案(通过使用注释或其他方式)?
  2. 如果在某些情况下标记接口仍然是一种解决方案,我如何区分何时应该使用它们?
0 投票
1 回答
700 浏览

c# - Autofac 和逆变:解析为更多派生类型

我正在编写一个通用消息处理程序,需要通过 AutoFac 获取各种消息处理程序。消息处理程序的基本定义是:

我还定义了一个标记接口,以便可以在 AutoFac 中轻松注册这些接口

示例消息处理程序是:

这些都是通过 Autofac 很好地注册的,使用

这一切都很好。但是,当我需要解决处理程序时,我遇到了问题

为什么上面的转换返回null?即使在IMessageHandler<>接口中定义了逆变。

如何解决适当的处理程序?

谢谢

0 投票
1 回答
428 浏览

spring-mvc - Spring MVC @Validation 与通用控制器方法中的标记接口

我有一个 Spring MVC 调查应用程序,其中每个表单 POST 调用的 Controller 方法几乎相同:

唯一的区别是在沿途的每个站点都验证了 SurveyCommand 对象的哪一部分。这是由传递给 @Validated() 注释的标记接口指定的。标记接口(SurveyGroupOne、SurveyGroupTwo 等)就是这样,标记:

它们应用于 SurveyCommand 对象中对象的属性:

我的问题:我怎样才能使方法通用并且仍然使用特定于正在处理的页面的标记接口?像这样的东西:

如何仅根据 pageNum @PathVariable(或任何其他参数)将正确的标记接口传递给 @Validated?