gpt4 book ai didi

java - Java9 中的合成修饰符和强制修饰符有什么区别

转载 作者:搜寻专家 更新时间:2023-10-30 19:47:20 26 4
gpt4 key购买 nike

Modifier for Exports在 java 文档中指出

MANDATED The export was implicitly declared in the source of the moduledeclaration.

SYNTHETICThe export was not explicitly or implicitly declared in the source ofthe module declaration.

查看几个module-info.classes,我可以看到通常有两种用法:

module java.base {
...
exports java.util; // type 1
exports java.util.concurrent;
exports java.util.concurrent.atomic;
exports jdk.internal to jdk.jfr; // type 2
exports jdk.internal.jmod to
jdk.compiler,
jdk.jlink;
...
}

Qualified Exports确实描述了这两种类型,但没有提到枚举类型。这些是文档中提到的不同类型吗?

Q1. 一般来说,SYNTHETICMANDATED 是在 Exports 中使用的修饰符, ModuleDescriptor , OpensRequires .这两者之间有什么区别,在实践中哪个更受青睐?

Q2. 什么是 Synthetic Modifier 的示例,如果没有在源代码中声明模块的

最佳答案

Synthetic 和 Mandated 修饰符的区别很简单 - mandate 是隐式声明的,而 synthetic 不是隐式或显式声明的。有一些很好的文章,java 规范对早期引入 java 的合成修饰符有详细的解释。由于细节的完整性,以下与合成相关的细节是从那些细节中提取的。请在最后找到引用资料。

合成:

The Synthetic attribute is a fixed-length attribute in the attributes table of a ClassFile, field_info, or method_info structure (§4.1, §4.5, §4.6). A class member that does not appear in the source code must be marked using a Synthetic attribute, or else it must have its ACC_SYNTHETIC flag set. The only exceptions to this requirement are compiler-generated methods which are not considered implementation artifacts, namely the instance initialization method representing a default constructor of the Java programming language (§2.9), the class initialization method (§2.9), and the Enum.values() and Enum.valueOf() methods. Java synthetic classes, methods and fields are for java runtime’s internal purposes. We may not need to have knowledge about them to write the code.

The Synthetic attribute was introduced in JDK release 1.1 to support nested classes and interfaces.

The Synthetic attribute has the following format:

Synthetic_attribute {
u2 attribute_name_index;
u4 attribute_length;
}

The items of the Synthetic_attribute structure are as follows:

attribute_name_index The value of the attribute_name_index item must be a valid index into the constant_pool table. The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure representing the string "Synthetic".

attribute_length The value of the attribute_length item is zero. Uses of Java Synthetic • It might be useful in debugging sessions, when we see those synthetic stuff in stack trace we can understand what it is. • AOP, generics, enums uses Java synthetic. • Java reflection API exposes method to check if an element is synthetic. • A regular java application programmer will not require synthetic for day to day programming. • This knowledge may be required in interviews but that doesn’t mandate that you will use it in the project. When synthetic is created? When an enclosing class accesses a private attribute of a nested class, Java compiler creates synthetic method for that attribute. If there is a getter method available in source then this synthetic method will not be created. Similarly for constructor of inner classes also synthetic is created. There are many occasions, like this where a synthetic field or method or class is created.

强制:

The opens package was implicitly declared in the source of the module declaration. This dependence was declared in the module declaration. A mandated construct is the one that is not explicitly declared in the source code, but whose presence is mandated by the specification. Such a construct is said to be implicitly declared. One example of a mandated element is a default constructor in a class that contains no explicit constructor declarations. Another example of a mandated construct is an implicitly declared container annotation used to hold multiple annotations of a repeatable annotation type. Ex:

 Module claim
requires mandated java.base

Line 1. Defines the module called claim. In line 2 defines every module depends on java.base module except java.base. That means export was implicitly declared in the source module declaration.

引用资料:

关于java - Java9 中的合成修饰符和强制修饰符有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46272344/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com