覆盖GAE属性的Comparable接口?

时间:2014-06-18 11:26:06

标签: google-app-engine google-cloud-datastore objectify

我不确定这是否可行,但有没有办法在查询中使用时覆盖Google App Engine属性使用的Comparable?例如,文档中有一个属性类型PhoneNumber(基本上是一个String),它有一个方法:

public int compareTo(PhoneNumber o)
    Specified by:
    compareTo in interface java.lang.Comparable<PhoneNumber>

我无法找到它的确切运作方式。有没有办法覆盖Comparable,以便以我选择的方式对其进行比较?

由于

1 个答案:

答案 0 :(得分:1)

没有。但您可以按照自己的方式对任何集合进行排序。因为你用objectify标记了这个:

@Entity
public class Thing {
    private static final Comparator<PhoneNumber> SPECIAL_COMPARATOR = // make one

    // ... id, etc
    SortedSet<PhoneNumber> phoneNumbers = new TreeSet<>(SPECIAL_COMPARATOR);
}

如果您需要以特定方式索引的电话号码,这将无法帮助您(尽管收集属性索引排序反正会非常奇怪)。如果您有一个索引电话号码属性并且想要控制索引排序,则需要创建自己的PhoneNumber,转换为正确排序的字符串表示形式。您需要使用Objectify注册​​自己的PhoneNumberTranslatorFactory。这并不难;查看示例的源代码。