문제

이 질문은 이미 여기에 답이 있습니다.

Java 개체의 주소를 얻는 방법이 있습니까?

질문이 어디에서 왔습니까? : 처음에는 속성 파일을 읽고 파일의 모든 데이터가 테이블에 배치되었습니다. 속성 파일이 업데이트 될 수 있습니다. 그래서 그 파일을 듣고 싶습니다. PropertyChangesUpport 및 PropertyChangelistener를 사용하여 객체를 듣습니다.

updatedStatus = new basit.data.MyString();
    updatedStatus.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

        //After changes "i", we inform the table model about new value
            public void propertyChange(PropertyChangeEvent evt) {
                Object objec=evt.getNewValue();
                tableModel.setValueAt(objec.toString(), 0, 5);
            }
        });

UpdatedStatus가 변경되면 테이블을 업데이트합니다. MyString 클래스에는 개인 문자열 "값"이 있습니다. 속성 파일을 듣고 싶습니다. 따라서 업데이트 된 status.value 및 string of properties 파일을 동일한 주소에서 동일하게 만들어야합니다. 할 수 있다면 속성 파일을들을 필요가 없습니다.

updatedStatus.setValue(resourceMap.getString("HDI.Device.1.Name"));

StringBuffer를 사용하려고했지만 달성 할 수 없었습니다. 그래서 나는 질문을 물었다.

도움이 되었습니까?

해결책

첫째, 아니요, Java에서 객체의 주소를 얻을 수 없습니다. 적어도 디버깅 에이전트가없는 순수한 Java는 아닙니다. 주소는 시간이 지남에 따라 움직일 수 있습니다. 당신은 그것을 필요로하지 않습니다.

둘째, 설명을 따르기가 약간 어렵지만 확실히 습관 파일 자체의 변경 사항을 듣지 않고 도망 갈 수 있습니다. 파일을 a에로드하면 Properties 객체, 나중에 디스크 파일의 변경 사항 습관 구체적으로 다시로드하지 않는 한 해당 객체에서 볼 수 있습니다.

기본적으로 파일의 변경 사항을 듣고 (또는 폴링) 파일을 새로로드해야합니다 (새로 새로로드해야합니다. Properties 또는 그 시점에서 기존의 것을 덮어 씁니다. 당신이 꽤 또한 문자열 컨테이너의 업데이트를 듣는 것이 응용 프로그램에 따라 다릅니다.

다른 팁

메모리에서 객체의 주소를 얻을 수 있습니다. 어떻게? 그것은 그런 것입니다.

Java에서 Sun.misc.unsafe 클래스 사용.

새롭지 않은 객체를 만들고 사용하십시오 getAddress(Object); 방법은 주소 인 긴 값을 반환합니다.

또한이 수업에는 많은 방법이 있습니다.

이 주소의 값을 사용하여 변경할 수 있습니다 putInt(Object,long offset, int value) 또는이 방법처럼. (가치를 얻는다 getnt(Object)).

참고 :이 수업은 실제로입니다 위험한 . 프로젝트에서 잘못된 일을한다면 JVM 중지됩니다.

System.identityHashCode(obj) 각 객체마다 고유 한 숫자입니다. 기본값에 해당합니다 Object.hashCode() 구현.

API를 인용 할 때 : "합리적으로 실용적으로, 클래스 객체로 정의 된 해시 코드 메소드는 별개의 객체에 대해 별개의 정수를 반환합니다. (이것은 일반적으로 객체의 내부 주소를 정수로 변환하여 구현됩니다. 그러나이 구현 기술은 다음과 같습니다. Javatm 프로그래밍 언어에는 필요하지 않습니다.).

Apache Commons 구성을 살펴보십시오. 이 라이브러리에는 (예 :) 속성 파일의 동적 재 장전을 지원합니다. 보다 여기.

일부 파일 변경 여부를 관찰하는 가장 좋은 방법은 IMHO가 SHA1 또는 MDA5로 해시 값을 만들고 캐시에 값을 저장하는 것입니다. 그리고 몇 분마다 몇 초마다 파일 변경을 얼마나 자주 시청하는지에 달려 있고 파일을 통해 해시 값을 만드는 스레드를 만듭니다. 따라서이 두 값을 비교할 수 있으며 값이 동일하지 않으면 새 파일을 다시로드 할 수 있습니다.

Java는 C/C ++를 좋아하지 않습니다. C ++에서는 종종 주소로 작업합니다 (C ++ 프로그래머는 개념 호출 포인터가 있습니다). 그러나 나는 Java가 아닌 것을 두려워합니다. Java는 주소를 만지는 것을 방지 할 수 있도록 매우 안전합니다.

그러나 아이디어와 동일한 다른 방법은 해시 코드를 사용하는 것입니다. 힙의 주소에 대한 객체 기반의 해시 코드.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top