当前位置: 首页 > 面试题库 >

JVM如何处理标记接口

贡俊
2023-03-14
问题内容

标记界面没有任何东西。它仅包含接口声明,然后JVM如何对实现此标记接口的类进行处理?

我们可以创建任何新的标记器接口吗?


问题答案:

您的问题确实应该是 编译器 如何处理标记接口,而答案是: 与其他接口没有什么不同 。例如,假设我声明了一个新的标记接口Foo

public interface Foo {
}

…然后声明一个Bar实现的类Foo

public class Bar implements Foo {
  private final int i;

  public Bar(int i) { this.i = i; }
}

我现在可以Bar通过type的引用来引用的实例Foo

Foo foo = new Bar(5);

…,并(在运行时)检查对象是否实现Foo

if (o instanceof Foo) {
  System.err.println("It's a Foo!");
}

后一种情况通常是使用标记接口的驱动程序。前一种情况几乎没有好处,因为没有可以调用的方法Foo(无需先尝试向下转换)。



 类似资料:
  • 问题内容: 是否可以在Java中编写我们自己的标记接口。我正在写类似的代码 那是标记界面吗? 如果有可能,那么我如何让JVM知道该接口是我自己创建的标记器接口? 问题答案: 是的,那是标记界面。您将测试对象是否“实现”它的方法很简单: 对于特定的 类 (而不是对象),您想要 不过,您应该考虑使用注释而不是标记界面。它们并非总是直接替换,但在许多情况下,它们用于相同的目标,并且注释(IMO)更干净。

  • 下面是我的代码片段: 现在java用'unhandled exception type SQLException)标记指示语句(以及后面的所有语句)。gfsql.dosql抛出此异常并定义为: public ResultSet doSQL(String sqlCommand)抛出SQLException{ 有趣的是--如果我像这样重复“catch”块: 未标记“未处理”错误。(但是,重复的catc

  • 问题内容: 有人可以解释一下Java中标记接口的约定吗? 例如:如果标记界面没有字段/方法,那么定义在哪里? 为什么每次使用时都应实施i / f ? 好吧,我的问题是,如果是类方法,为什么要实现i / f来覆盖。 有人可以详细说明一下Java的这种约定吗? 提前致谢 问题答案: 在所有类的扩展类中定义,但它是。这实际上是一个具体的方法实现,它对对象进行逐字段克隆,但前提是您已实现接口以表明允许这样

  • 有人可以解释一下 java 中标记接口的契约吗? 例如:如果是一个没有字段/方法的标记接口,那么在哪里定义? 为什么每当使用 时,我们都应该实现的 i/f? 好吧,我的问题是,如果是 class的一种方法,为什么要实现 i / f来覆盖 有人能详细说明一下java的这个惯例吗? 提前致谢

  • 问题内容: 在阅读有关标记接口的信息时,我偶然发现了以下站点:项目37:使用标记接口定义类型 在这里,根据Joshua Bloch的说法,标记接口比标记注释有两个优点。 1. 标记接口定义了一种由标记的类的实例实现的类型。标记注释没有。这种类型的存在使您可以在编译时捕获错误,而如果使用标记注释,则这些错误在运行时才捕获。 2. 标记接口相对于标记注释的另一个优点是可以更精确地定位它们。如果使用ta

  • 在阅读有关标记接口的内容时,我偶然发现了以下网站:第37项:使用标记接口定义类型 根据Joshua Bloch的说法,标记接口比标记注释有两个优点。 > 标记接口定义由标记类的实例实现的类型;标记注释没有。这种类型的存在允许您在编译时捕获错误,如果您使用标记注释,则直到运行时才能捕获这些错误。 与标记注释相比,标记接口的另一个优点是可以更精确地定位它们。如果使用target,它可以应用于任何类或接