我正在使用Java Reflection API,观察到带有可变参数列表的方法是 transient 的。为什么会这样?transient
关键字在此上下文中是什么意思?
从Java词汇表中, transient :
但是,此定义未提及方法。有任何想法吗?
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 - 为什么带有varargs的Java方法被标识为 transient ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4936803/