我正在使用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/

10-11 09:21