- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我扩展了 Apache Olingo 4 的一些基类(仍在开发中)以允许更强的打字。然而,我对泛型的使用导致了一个我没有预料到的错误。
我有一个类型参数 E,它扩展了 FooODataEntity,而 FooODataEntity 又实现了 ODataEntity 接口(interface)。由于 FooODataEntity 是一个 ODataEntity(只是更具体),我希望它可以顺利编译。然而,getEntities() 有一个编译错误,如下面的代码所示。
此外,我希望能够指定 List<E>
作为我覆盖 getEntities()
的返回类型但后来我收到一个编译错误:
'getEntities()' in 'com.foo.restapi.client.olingo.FooEntitySet' clashes with 'getEntities()' in 'org.apache.olingo.commons.api.domain.v4.ODataEntitySet'; attempting to use incompatible return type
我在这里缺少什么?
FooODataEntitySet:
package com.foo.restapi.client.olingo;
import com.foo.restapi.client.FooODataEntity;
import com.foo.restapi.client.exceptions.FooRuntimeException;
import org.apache.olingo.commons.api.domain.v4.ODataAnnotation;
import org.apache.olingo.commons.api.domain.v4.ODataEntity;
import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
import org.apache.olingo.commons.core.domain.AbstractODataEntitySet;
import java.lang.reflect.Constructor;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
public class FooEntitySet<E extends FooODataEntity>
extends AbstractODataEntitySet implements ODataEntitySet {
private final List<E> entities = new ArrayList<E>();
public FooEntitySet() {
super();
}
@Override
public List<ODataEntity> getEntities() {
// compile error
// Incompatible types. Found: 'java.util.List<E>',
// required: 'java.util.List<org.apache.olingo.commons.api.domain.v4.ODataEntity>'
return entities;
}
}
FooODataEntity:
package com.foo.restapi.client;
public class FooODataEntity extends AbstractODataPayload
implements ODataEntity, ODataSingleton {
// code not shown
}
最佳答案
您无法执行此操作是有原因的。而FooODataEntity
是 ODataEntity
,一个List<FoodODataEntity>
是不是 List<ODataEntity>
.
让我们更详细地介绍一下:
假设我有这门课:
public class BaconODataEntity implements ODataEntity {
// Pretend I implement all the ODataEntity things
}
我可以添加 BaconODataEntity
的实例进入List<BaconODataEntity>
和一个 List<ODataEntity>
...但不是进入 List<FooODataEntity>
.
所以,只需让您转换 List<FooODataEntity>
到 List<ODataEntity>
会破坏泛型本来要引入的类型安全性,因为我可以添加 BaconODataEntity
到它
那么,如何解决这个问题呢?好吧,如果你绝对需要你的列表是 List<E extends FooODataEntity>
, create a new List and copy the elements into it并返回该列表。
关于java - Java Generics 和 Apache Olingo 4 的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25214169/
我看到有描述使用 Olingo for Odata v2 注释的文档: https://olingo.apache.org/doc/odata2/tutorials/AnnotationProcess
我已经下载了Olingo server sample (Odata4),编译并部署在我本地的tomcat上 浏览网址http://localhost:8080/odata-server-sample/
我在 Hibernate 之上使用 Olingo 1.2。 我有一个返回 250 行的请求,每行以一对多关系链接到另一个表。 我执行 $expand 以获取子表中的所有数据,但是当我检查在数据库中执行
我尝试按照下面的 olingo 文档来创建一个 odata 服务。 AnnotationProcessor 但我无法创建具有类型为 ComplexType 列表的属性的实体。任何人都有它的例子。还是只
对于当前的项目,我们在 hibernate 之上使用 Olingo,并使用 picketlink 来实现安全性和角色。 具有不同角色的用户将具有不同的权限,这会影响对某些属性的读/写访问。考虑以下示例
即使我在代理后面,我也可以使用不同的浏览器并使用 Postman 成功访问以下 OData 服务: String SERVICE_ROOT = http://services.odata.org/V4
我们正在尝试使用 OData V4 的 Apache Olingo pojogen 解决方案。从生成的代码来看,它似乎不是线程安全的。有人知道在并发上下文中使用服务和实体容器的可能解决方案吗? 谢谢!
我是编程新手,在 Apache Olingo 上进行基本身份验证时遇到一些困难。 问题是我正在尝试使用基本身份验证访问 ODATA。当我尝试使用我的凭据访问该链接时,它工作正常。不幸的是,当我尝试 e
很抱歉,如果已经有人问过这个问题。我还没有找到答案。我有一个 oData v4 API,它根据从我公司的内部 Web 服务获取的 json 字符串构建 Olingo 实体集合。我还可以获取单个记录的
我正在使用 Apache olingo 开发 OData 客户端,凭据包含 native 字符,应该以 UTF-8 读取“授权” header 的 Base64 编码。第一种方法是 Olingo 建议
我使用 Apache Olingo v2。 SAP是服务器端,我负责客户端。我尝试编写一个带有导航实体的实体。我解释一下我想说的话。有一个名为 HUIDENT 的实体集,该集包含一个名为 ToHuCo
在 .NET C# 中,我们使用 Odata 对来自 SQL 数据库的数据库结果进行筛选、分页和排序。 .NET 中的 Odata 实际上会进入数据库,并查询 WHERE,ORDER By Filte
我在我的项目中使用 Apache Olingo v4 java 库,它工作得很好。谢谢! 我在调用某个特定端点时遇到问题 - https://learn.microsoft.com/en-us/dyn
目前我的项目正在使用 JPA 进行数据库连接。 我还使用默认的 OdataJPA 处理器。 如何才能不在我的 odata2 API 响应中包含某些字段,例如(“密码”)。或者我真的必须实现一个 cus
如何从代码实体类型中进行注释,如下所示: http://services.odata.org/OData/OData.svc/$metadata ? 提前致谢。 最佳答案 收到答复。在这里: 1. E
设置EntityType时键值是必需的吗? ? 这可能听起来有点奇怪,但我遇到了不需要 key 的情况。所以我问自己是否可以摆脱这些代码行。 List keyProperties =
OData官方教程展示了如何创建实体:http://www.odata.org/getting-started/basic-tutorial/#create 我想使用 Templier 的关于使用 O
我在 this tutorial 之后构建了一个基于 apache olingo、JPA 和 mySQL 的 OData Producer虽然在 OData Feed 中显示多对多关联,但根本不显示多
我按照 Apache Lingo 教程中概述的步骤创建了一个示例 OData 服务。 客户端收到的默认服务文档是: { "@odata.context" : "$metadata", "val
我正在尝试读取调用我的 OData 服务的用户的用户 ID。 在我的 web.xml 中,OData servlet 是一个保护区 EJODataServlet org.apache
我是一名优秀的程序员,十分优秀!