gpt4 book ai didi

java - 为什么带有可变参数的 Java 方法被识别为 transient ?

转载 作者:IT老高 更新时间:2023-10-28 20:46:26 26 4
gpt4 key购买 nike

我正在使用 Java 反射 API 并观察到带有可变参数列表的方法变得 transient 。为什么会这样? transient 关键字在这种情况下的含义是什么?

来自 Java 词汇表,transient:

A keyword in the Java programming language that indicates that a field is not part of the serialized form of an object. When an object is serialized, the values of its transient fields are not included in the serial representation, while the values of its non-transient fields are included.

然而,这个定义并没有说明任何关于方法的内容。有什么想法吗?

import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Dummy {
public static void main(String[] args) {
for(Method m : Dummy.class.getDeclaredMethods()){
System.out.println(m.getName() + " --> "+Modifier.toString(m.getModifiers()));
}
}

public static void foo(int... args){}
}

输出:

main --> public static
foo --> public static transient

最佳答案

可以在 javassist AccessFlag 的代码中找到某种答案

public static final int TRANSIENT = 0x0080;
public static final int VARARGS = 0x0080;

看起来两者具有相同的值。由于 transient 对方法没有任何意义,而 varargs 对字段没有任何意义,因此它们可以相同。

但是 Modifier 类不考虑这一点是不行的。我会提出一个关于它的问题。它需要一个新常量 - VARARGS 和一个新方法 - isVarargs(..)toString() 方法可以重写为包含“transient/varargs”。

关于java - 为什么带有可变参数的 Java 方法被识别为 transient ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4936803/

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