当前位置: 首页 > 知识库问答 >
问题:

Java泛型和Apache Olingo 4编译错误

哈栋
2023-03-14
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;
    }
}

FoodataEntity:

package com.foo.restapi.client;

public class FooODataEntity extends AbstractODataPayload 
        implements ODataEntity, ODataSingleton {

    // code not shown
}

共有1个答案

楚骞尧
2023-03-14

你不能这么做是有原因的。虽然FoodataEntityOdataEntity,但列表 不是列表

让我们更详细地介绍一下:

假设我有这门课:

public class BaconODataEntity implements ODataEntity {
    // Pretend I implement all the ODataEntity things
}

我可以将baconodataentity实例添加到列表 列表 中...但不能放入列表 中。

因此,简单地让您将列表 强制转换为列表 将破坏泛型应该引入的类型安全性,因为我可以向泛型添加baconodataentity

 类似资料:
  • 我得到以下编译错误: 当我编译(在Eclipse Juno中使用JDK 1.7.0)以下代码时: null 这样我就可以测试我所有的排序实现并测试它们。我想将结果与Java的排序实现进行比较,所以我也在编写这个接口的实现,它在内部只调用Java的排序方法。这就是我面对问题的地方。

  • 应该如何声明“GenericBo Bo”实例?正确的代码是什么?

  • 问题内容: 我在写一些代码,遇到编译错误。这就是我所拥有的: 我以为使用继承时没有正确声明泛型,所以我检查了Oracle的教程,他们在其中编写 上面的声明使用相同的泛型类型,这是我在示例中要完成的工作。似乎假设from 与from 有所不同。否则,它应该能够 将 两者 合并并看到相同的类型。如何正确实现我要实现的目标? ( 即,某物的常量是某物的值,这是同一物的表达 ) 问题答案: 您的变量定义为

  • Groovy中的简单泛型类 Groovy版本: 这是我做的一个简单的测试用例,当一个更复杂的类不能编译时,错误是“不能将类型T的值赋给类型double[]的变量”。

  • get1方法工作正常,但get2存在编译错误: > 类型A.B的方法get2(集合)必须重写或实现超类型方法 只有带有泛型的参数才会出现此错误<代码>get3编译,但当然有一个警告: > 显然还有其他方法可以解决这个问题,但在我的理解中,这应该是一个法律优先事项,我的问题更多的是为什么会有这个编译错误。提前谢谢! 编辑: 对不起,我的例子不够清楚。因此,这里有一个新的答案来回应你的一些观点。 与上

  • 问题内容: 我在编写一些Java代码时遇到了编译失败,我将其简化为以下测试用例: 上面的代码无法使用JDK 1.7.0_45 进行编译: 但是,使用JDK 1.8.0_05编译时不会出现任何错误。 这是Java 7实现中的错误吗?还是对Java 8中的Java语言规范进行了增强以开始允许这样做-如果是这样,有什么变化? 问题答案: JLS SE 8在(§15.2)中说: 当某些表达式出现在某些上下