2014-04-03 1 views
0

간단한 배열을 정의했으며 Unsafe.arrayBaseOffsetUnsafe.arrayIndexScale을 다음 스 니펫과 함께 사용하려고합니다.arrayBaseOffset 및 arrayIndexScale의 올바른 사용

import sun.misc.Unsafe; 
public class Arr 
{ 
    public static void main(String[] args) 
    { 
    int [] a = new int[3]; 
    a[0] = 10; a[1] = 20; a[2] = 30; 
    int baseOffset = Unsafe.arrayBaseOffset(a.getClass()); 
    int indexScale = Unsafe.arrayIndexScale(a.getClass()); 
    } 
} 

그러나 나는 이러한 오류가

Arr.java:11: non-static method arrayBaseOffset(java.lang.Class) cannot be referenced from a static context 
    int baseOffset = Unsafe.arrayBaseOffset(a.getClass()); 
         ^

Arr.java:12: non-static method arrayIndexScale(java.lang.Class) cannot be referenced from a static context 
    int indexScale = Unsafe.arrayIndexScale(a.getClass()); 
         ^
+0

정규화 된 개체 이름을 참조하려고 했습니까? 즉 'sun.misc.Unsafe'입니까? – christopher

답변

2

arrayBaseOffsetarrayIndexScale 방법은 정적하지 얻을, 그래서 당신은 당신이 방법을 호출 할 수 없습니다. 다음과 같이해야합니다.

Unsafe u = Unsafe.getUnsafe(); 
    int baseOffset = u.arrayBaseOffset(a.getClass()); 
    int indexScale = u.arrayIndexScale(a.getClass());