以下是我正在处理的一段代码:
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
)?
答案 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。
此外,它使代码松散耦合