如果密钥是私有的,如何返回EnumMap

时间:2015-07-01 22:45:37

标签: java

以下是我正在处理的一段代码:

GetInheritedPropertyList

SvnLookClient.GetPropertyList枚举的目的是跟踪上次更新Person字段的时间。如何才能使其成为另一个类可以调用package testPack.model; public class Person { private static enum Field { NAME, ALIASES, DATE_OF_BIRTH, DATE_OF_DEATH; } private EnumMap<Field, Optional<Instant>> lastUpdateTime; private Name name; private ArrayList<String> aliases; private Optional<LocalDate> dateOfBirth; private Optional<LocalDate> dateOfDeath; public final EnumMap<Field, Optional<Instant>> getUpdateTimes() { // Return a copy to avoid external changes to person return new EnumMap<Field, Optional<Instant>>(lastUpdateTime); } } 并在返回时操作而无法访问Field。具体来说,我希望能够迭代值并获得特定值。我是否需要公开Field,如果是这样,我如何使用字段而不需要导入它(即如何避免必须进行getUpdateTimes)?

2 个答案:

答案 0 :(得分:0)

您至少需要导入Person类。如果你公开枚举,你应该能够从另一个包中的类访问它(并按照你的说法迭代键),如下所示:

import testPack.model.Person;
...
Person person = new Person();
...
Map<Person.Field, Optional<Instant>> updateTimes = person.getUpdateTimes();
for (Person.Field field : updateTimes.keySet())
{
    ... // do something with the key
}

如果确实需要,可以通过将两个类放在同一个包中来避免导入。

答案 1 :(得分:0)

这样做怎么样?

在Field.java中有枚举

package testPack.model;

public enum Field {
    NAME, ALIASES, DATE_OF_BIRTH, DATE_OF_DEATH;
}

有一个单独的Person.java文件

package testPack.model;

    public class Person {
        private static Field field;

        private EnumMap<Field, Optional<Instant>> lastUpdateTime;
        private Name name;
        private ArrayList<String> aliases;
        private Optional<LocalDate> dateOfBirth;
        private Optional<LocalDate> dateOfDeath;

        public final EnumMap<Field, Optional<Instant>> getUpdateTimes() {
            // Return a copy to avoid external changes to person
            return new EnumMap<Field, Optional<Instant>>(lastUpdateTime);
        }
    }

然后,相应地导入packages.class。

此外,它使代码松散耦合