4

我正在使用 google code pro Analatics 来测量代码覆盖率。

源代码

public class StackArray<T> implements Stack<T> {
    private int top;
    private T[] elements;

    public StackArray(Class<T> type, int size) {
        top = -1;
        elements = (T[]) Array.newInstance(type, size);
    }

    //Other stack related methods
}

生成的类文件

import com.vladium.emma.rt.RT;
import java.lang.reflect.Array;

// Referenced classes of package ds.stack:
//            Stack

public class StackArray implements Stack {

    private int top;
    private Object elements[];
    private static final int $VRc[][]; /* synthetic field */
    private static final long serialVersionUID = 0x927be770ed420794L; /* synthetic field */

    public StackArray(Class type, int size)
    {
        int ai[] = ($VRc != null ? $VRc : $VRi())[0];
        super();
        top = -1;
        elements = (Object[])Array.newInstance(type, size);
        ai[0] = ai[0] + 1;
    }
}

我的问题是在 this 或 super 之前的构造函数中如何允许这条线

int ai[] = ($VRc != null ? $VRc : $VRi())[0];
4

1 回答 1

2

限制super()this()仅允许作为构造函数中的第一条指令是 Java 编译器施加的限制,而不是字节码/对象类。

“生成的类文件”要么是对在常规 Java 编译器下无法编译的对象类的反编译,要么与允许此类构造的更改后的 Java 兼容。在这两种情况下,代码看起来 99% 都是 Java 源文件,但事实并非如此。

于 2013-09-01T07:05:52.793 回答