【问题标题】:How many interface we can declare within a class in java/android我们可以在 java/android 的一个类中声明多少个接口
【发布时间】:2016-07-28 05:33:48
【问题描述】:

我们可以在一个类中声明多少个接口。

这个号码是 65535 吗?如果是,那为什么?如果没有,限制是多少?为什么?

类似:

public class GenericModelLinker {
   public interface Link {
      Object getProperty(IAdaptable n);
      void setProperty(IAdaptable n, Object value);
   }
 // .........so on
}

提前致谢

【问题讨论】:

  • 你从哪里得到这个号码65535?你有这方面的参考吗?
  • 是的,我已经阅读了一些关于 stackoverflow 接口的文章

标签: java android interface


【解决方案1】:

是的!根据Java虚拟机官方Specifications。似乎字段、方法和嵌套类型信息都存储在某种大小有限的结构中。

如果你问为什么 65535 ?原因很简单:

它是可以用无符号表示的最大数 16位二进制数

4.11。 Java 虚拟机的局限性

Java 虚拟机的以下限制隐含在 类文件格式:

每个类或每个接口的常量池限制为 65535 ClassFile 的 16 位 constant_pool_count 字段的条目 结构(§4.1)。这是对总数的内部限制 单个类或接口的复杂性。

一个类或接口可以声明的字段数是 受 ClassFile 的 fields_count 项的大小限制为 65535 结构(§4.1)。

注意ClassFile的fields_count项的值 结构不包括从超类继承的字段 或超级接口。

一个类或接口可以声明的方法的数量是 限制为 65535 的 methods_count 项的大小 类文件结构(第 4.1 节)。

注意ClassFile的methods_count项的值 结构不包括继承自的方法 超类或超接口。

一个类或接口的直接超接口的数量是 限制为 65535 的 interfaces_count 项的大小 类文件结构(第 4.1 节)。

局部变量数组中的最大局部变量个数 在调用方法(第 2.6 节)时创建的框架限制为 65535 按 Code 属性的 max_locals 项的大小(第 4.7.3 节) 给出方法的代码,并由 16 位局部变量 Java 虚拟机指令集的索引。

请注意,long 和 double 类型的值都被认为是 保留两个局部变量并贡献两个单位 max_locals 值,因此进一步使用这些类型的局部变量 减少这个限制。

帧中操作数堆栈的大小(第 2.6 节)限制为 65535 Code 属性的 max_stack 字段的值(第 4.7.3 节)。

请注意,long 和 double 类型的值都被认为是 为 max_stack 值贡献两个单位,因此使用 操作数栈上的这些类型进一步降低了这个限制。

方法参数的数量被定义为255个 方法描述符(§4.3.3),其中限制包括一个单位 this 在实例或接口方法调用的情况下。

请注意,方法描述符是根据以下概念定义的 方法参数长度,其中 long 或 double 类型的参数 为长度贡献两个单位,因此这些类型的参数 进一步降低限制。

字段和方法名称、字段和方法描述符的长度, 和其他常量字符串值(包括那些由 ConstantValue(第 4.7.2 节)属性)被限制为 65535 个字符 CONSTANT_Utf8_info 结构的 16 位无符号长度项 (§4.4.7)。

请注意,限制是编码中的字节数,而不是 关于编码字符的数量。 UTF-8 编码一些字符 使用两个或三个字节。因此,包含多字节的字符串 字符被进一步限制。

数组的维数限制为 255 multianewarray 指令的维度操作码和 对 multianewarray、anewarray 和 newarray 施加的约束 说明(第 4.9.1 节、第 4.9.2 节)。

【讨论】:

  • 请同时注明此信息的来源网址。
  • @shriduttkothari 它已经被提及。点击第一行的Specifications
猜你喜欢
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2013-11-02
相关资源
最近更新 更多