【问题标题】:Using an extended ArrayList in Google App Engine Endpoints在 Google App Engine Endpoints 中使用扩展的 ArrayList
【发布时间】:2013-06-02 07:15:01
【问题描述】:

我正在为 Google App Engine 创建一个端点,为了简单起见,我遇到了创建自定义 ArrayList 的需求,但我似乎遇到了麻烦。

如果我使用这样的东西,一切都很好

public class MyClass {
    @ElementCollection
    private List<Person> People;
    // etc
}

如果我切换到

public class PersonList extends ArrayList<Person> {
    // custom methods
}

public class MyClass {
    @ElementCollection
    private PersonList People;
    // etc
}

我得到了错误

PersonList 不是受支持的属性类型。

我必须坚持第一个实现,还是有办法扩展 List 类?

【问题讨论】:

    标签: java google-app-engine google-cloud-endpoints


    【解决方案1】:

    首先,我假设您只是在问题中打错了字,您将类定义为PeopleList,然后声明PersonList 类型的成员变量...对吗?

    如果你的代码也没有这个错误,那么也许你可以使用这个:

    public class MyClass {
        @ElementCollection
        private List<Person> People;
        // etc
    }
    

    这使您可以使@ElementCollection 工作,但是当您实例化 People 时,请使用:

    People = new PersonList();
    

    PersonList 在哪里:

    public class PersonList extends ArrayList<Person> {
       // custom methods
    }
    

    这对您的效果可能取决于您是否扩展 ArrayList 只是为了做一些 内部 簿记,或者如果您想在其接口中添加更多 public 方法,以从MyClass 内部调用。如果是后者,那么显然这需要您进行一些转换,因为 People 被声明为 List&lt;Person&gt; 类型,尽管我们知道在这种情况下它也是 PersonList

    ((PersonList)People).somePersonListMethod();
    

    【讨论】:

    • 不知道为什么我没有想到演员的方式来做到这一点,但我猜这会奏效。我会在今天晚些时候能够检查时进行验证。谢谢
    • 我的问题中的错字到底是什么?我想知道我是否在做一些令人震惊的事情。
    • 啊,打错了。我看了我的问题 20 次,但没有看到。谢谢你的回答
    猜你喜欢
    • 2019-02-09
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2013-11-02
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多