0
클래스 초기화시 생성되는 ImmutableSortedSet이 있습니다. 이 클래스의 모든 객체에서 ImmutableSortedSet에 다른 파일에있는 Collection에 저장된 요소의 딥 복사 (복제)를 원합니다. Java에서 클래스 초기화시 ImmutableSortedSet에 대한 콜렉션의 전체 복사본 만들기
이
은 원래 값 컬렉션 (도 될 수있는 세트)public static final List<Quest> QUESTS = new ArrayList<>();
이 내가 당신은 어떻게 설명하지 않은 ImmutableSortedSet
package com.vencillio.rs2.content.quest;
import java.util.Optional;
import java.util.Set;
import com.google.common.collect.ImmutableSortedSet;
public class QuestManager {
private int questPoints = 0;
private final Set<Quest> QUESTS = ImmutableSortedSet.copyOf(Quest.QUESTS); //This is only a shallow copy
public int getQuestPoints() {
return questPoints;
}
public void addQuestPoints(int amount) {
questPoints += amount;
}
public void removeQuestPoints(int amount) {
questPoints -= amount;
}
public Optional<QuestState> getQuestState(String name) {
return getQuest(name).isPresent() ? Optional.of(getQuest(name).get().getQuestState()) : Optional.empty();
}
public void setQuestState(String name, QuestState state) {
if(getQuest(name).isPresent())
getQuest(name).get().setQuestState(state);
}
public Optional<Quest> getQuest(String name) {
return QUESTS.stream().filter(quest -> quest.getName().equalsIgnoreCase(name)).findAny();
}
}
'Quest'복사본을 얻기 위해 Cloneable 인터페이스를 구현합니다. 나는 당신이 내게 준 것을 사용했고 본질적으로 그것을 얻었습니다. 'ImmutableSortedSet'에 Comparator 인수를 넣어야합니다. 내 퀘스트 클래스는과 비교기 을 구현하지만 추상적 인 경우 해당 클래스의 비교자를 어떻게 사용할 수 있습니까? –
Metorrite
'Comparator'와 'Comparable'을 모두 구현해야하는 것은 없습니다. _Never. _ 'Comparable' 자연 순서를 사용하려면 자연 순서를 사용하기 때문에 내가 쓴 것과 똑같은 것을 사용하십시오. 'Comparator'를 사용하고 싶다면, 다른 클래스를 만들고,'naturalOrder()'대신 위에 쓴 코드에 그것을 넘겨 줘라. –
'ImmutableSortedSet.naturalOrder()'는'ImuutableSortedSet.toImmutableSortedSet()'이 비교 자의 타입을 요구하고있는 빌더 타입을 반환합니다. 무엇을 거기에 두어야합니까? 도와 주셔서 감사합니다. – Metorrite