2016-08-16 6 views
0

HashMap의 Java 7 반복 순서에 의존하는 응용 프로그램을 업그레이드하는 중입니다. Java 8 HashMap이이 애플리케이션의 일부와 호환되지 않는 반복 순서를 변경했기 때문에 Java 8 HashMaps를 사용하여 Java 8로 애플리케이션을 성공적으로 마이그레이션해야합니다.Java 8에서 Java 7 HashMaps를 사용하는 방법?

  1. 는 자바 7의 HashMap의 소스 코드를 찾아 복사 및 붙여 넣기 일반 자바 (8)의 HashMap에게
  2. 를 확장하는 Java7HashMap을 확인합니다.
  3. "가져 오기 java.util.HashMap;" "가져 오기 (...). Java7HashMap;"
  4. 철저히 테스트하십시오.

이렇게하는 것이 좋은 방법일까요? 유감스럽게도 HashMap의 Java 7 버전에 의존하는 부분을 다시 작성하는 옵션은 아닙니다.

+14

HashMap이 정렬되어 있지 않으므로 "Java 7 HashMap 정렬 방식에 의존"한다는 것은 무엇을 의미합니까? – Eran

+3

기본적으로 모든 최신 Java 버전은 이전 버전과 역 호환됩니다. Java 8로 마이그레이션 한 후에는 Java 7 코드와 관련하여 문제가 발생하지 않아야합니다. –

+1

@Simze이 경우와 같이 문서화되지 않은 구현 세부 사항에 의존하지 않는다면 (HashMap이 Java 7에서 내부적으로 어떻게 작동하는지). – Tunaki

답변

1

예, 접근 방법이 좋습니다. 모두가 부적절한 느낌을 갖고있는 것처럼 보입니다. 당신은 단지 구현 변화를 갖고 싶어하지만 :

Map<Lorem, Ipso> goodMap = new HashMap<>(); 
HashMap<Foo, Bar> badMap = new HashMap<>(); 

그래서에만 new HashMap 나중에 통합을 모든 부적응을 발견하고, 허용 new Java7HashMap로 교체, 더 키가 Comparable를 사용하여 말한다.

당신은 아마 자바 8 implement Map 필요하고,이 한대로 작동하므로 실제로 난, 자바 8 지원 누락 걱정하지 것이고, 추가 개발 Java7HashMap의 대체를 제공해야합니다. 재 작성 시간을 늘리십시오. 당근과 막대기 접근.

8

문제는 HashMap이 아니며, 문제는 HashMap을 잘못 사용하고있는 코드입니다. HashMap은 주문에 대해 Garantuee를 제공하지 않습니다.

HashMap을 (를) 사용중인 코드를 수정하십시오! 이렇게하면 코드가 JDK의 이후 릴리스와도 호환됩니다.

+0

여기 거짓말을했습니다. 가능한 많은 세부 사항은 없지만 모든 역사적인 데이터를 Java 8 구현과 호환되게 만들려면 스크립트를 작성하고 2 개월 이상 연중 무휴로 실행해야합니다. 나는 이런 식으로 생각해 냈고,이 문제에 대한 가능한 해결책으로 여겨졌다. – Gamer1120