2013-06-03 4 views
2

배열 인스턴스에 여분의 메타 데이터를 저장하는 방법을 찾고 있습니다. 클래스 파일 바이너리에 직접 추가 String 필드를 삽입하기 위해 바이트 코드 삽입 기술을 사용하여 표준 객체에 대해이를 실현할 수있었습니다.배열 인스턴스에 메타 데이터 추가

그러나이 전략을 사용하려면 .class 파일을 수정해야합니다. java의 배열 클래스는 해당 .class 파일을 가지고 있지 않으므로이 매너에 인스트루먼트 될 수 없습니다. 이것을 달성 할 수있는 다른 가능한 방법이 있습니까?

나는 JVM C++ 파일을 수정하지 않고도 이것을 java로 구현하는 것이 바람직하다. 복잡성의 추가 계층을 제외하고 이것은 의심 할 여지없이 프로젝트에 추가 될 것입니다.이 경로를 사용하면 플랫폼이 제공하는 많은 가치있는 이식성을 거의 깨뜨릴 수 있습니다.

+0

당신은 배열 유형의 모든 인스턴스에 일반적인 장비를 추가하려면? 그럴 가능성이 없습니다. –

+0

예, 모든 배열 인스턴스에 단일 필드를 추가하고 싶습니다. Array 클래스는 JVM 수명주기의 비교적 초기에로드되므로 클래스는 부트 클래스 경로에 정적으로 계측되어 미리 보류되어야합니다. –

+0

@kuporific 예 길 라메 다 몬트에게 회신을 보냅니다. –

답변

1

WeakHashMap로 문의하십시오.

맵 계약과 일치 시키려면 equalshashcode 메소드를 무시할 래퍼 클래스를 정의해야합니다. 그런 다음 사용자 정의 특성을 처리 할 메타 데이터 오브젝트를 정의합니다.

프로토 타입은 다음과 같습니다

WeakHashMap<ArrayWrapper,MetaData> map; 
map.put(new ArrayWrapper(primitiveArray), new MetaData("string1",...)); 
+0

이러한 유형의 솔루션이 필요할 수 있습니다. JVM 프로세스에 연결 한 플랫폼을 구축하고 메모리 액세스 요청을 가로 채고 계기로 진행합니다. 이제는이 모든 것이 애플리케이션 개발자에게 투명하게 이루어져야합니다. 새로운 래퍼 인스턴스를 객체 그래프에 도입함으로써 이것은 성취하기가 조금 더 어렵지 만 불가능하지는 않습니다. 따라서 배열 클래스에 직접 추가 데이터를 저장할 방법이 없다고 생각하십니까? –

+0

예, 현재 다른 옵션이 없습니다. –

관련 문제