>

Guava StandardTable 클래스는 AbstractTable의 put 메소드를 재정의합니다

// in AbstractTable class
@CanIgnoreReturnValue
@Override
public V put(R rowKey, C columnKey, V value) {
  return row(rowKey).put(columnKey, value);
}
// in StandardTable class
@CanIgnoreReturnValue
@Override
public V put(R rowKey, C columnKey, V value) {
  checkNotNull(rowKey);
  checkNotNull(columnKey);
  checkNotNull(value);
  return getOrCreate(rowKey).put(columnKey, value);
}

테이블 사용을 만듭니다

Tables.newCustomTable(Maps.newLinkedHashMap(), Maps::newHashMap);

내 코드는 경우에 따라 null 값을 테이블에 설정하지만 gauva는 put 메소드에서 예외를 throw합니다. nullable 값으로 표준 테이블을 어떻게 구현할 수 있습니까? (나는 ForwardingTable을 구현하고 get/put 메소드를 재정의하려고 시도하고 특정 클래스 바꾸기 null 값을 사용하지만 충분하지 않습니다. 예 : 행 메소드는 null 대신 map을 포함하는 특정 클래스를 반환합니다)


  • 답변 # 1

    null  일반적으로 어떤 Collection 에서 키 또는 가치로 간주  또는 Map  나쁜 결정으로 간주됩니다. jdk 자체에는 몇 가지 예가 있습니다.  널 키 또는 값을 허용하지않고, ConcurrentHashMap 도 허용  그리고 다른 많은 사람들.

    ConcurrentSkipListMap 에 추가 된 정적 팩토리 메소드도 java-9 처럼 . 심지어 Map::of  무효는 null 키와 값을 허용하므로 둘 다 실패하지 않습니다.

    HashMap
    
    

    새로운 HashMap<String, String> map = new HashMap<>(); map.put("", null); map.put(null, ""); 사용   java-8 의 방법   HashMap 를 던질 것입니다 :

    NullPointerException
    
    
    그리고 마지막 요점은 모든 // value trying to be null chm.merge("", null, (k, v) -> k); 입니다  컬렉션은 내결함성이 없으며 훌륭한 결정입니다.

    guava

관련 자료

  • 이전 python - 소스 레이블이있는 apiupdate_status의 상태 인 문자열 변수
  • 다음 c - 이진 파일에서 레코드 수정