相关疑难解决方法(0)

什么是PECS(制作人扩展消费者超级)?

我在阅读泛型时遇到了PECS(制片extends人和消费者的super简称).

能否给我一个人解释如何使用佩奇之间解决困惑extendssuper

java generics super pecs bounded-wildcard

680
推荐指数
11
解决办法
9万
查看次数

java:如何修复未选中的强制转换警告

我有以下代码:

private HashMap<Class<?>, HashMap<Entity, ? extends Component>> m_componentStores;

public <T extends Component> T getComponent(Entity e, Class<T> exampleClass)
{
    HashMap<Entity, ? extends Component> store = m_componentStores.get(exampleClass);

    T result = (T)store.get(e);

    if (result == null)
    {
        throw new IllegalArgumentException( "GET FAIL: "+e+" does not possess Component of class\nmissing: "+exampleClass );
    }

    return result;
}
Run Code Online (Sandbox Code Playgroud)

当我编译时,它显示T result = (T)store.get(e)有一个未经检查的强制转换.

Type safety: Unchecked cast from capture#2-of ? extends Component to T
Run Code Online (Sandbox Code Playgroud)

为防止出现此警告,我错过了什么?

java generics casting

24
推荐指数
3
解决办法
4万
查看次数

Java泛型与T和?的区别?延伸T.

有用.

方法声明

<T> Session<T> start(Criteria<T> criteria, List<Property<T>> orders);
Run Code Online (Sandbox Code Playgroud)

用法

Criteria<? extends Product> criteria = Utils.getCriteria();
Session<? extends Product> session = null;
session = Service.start(criteria, null);
Run Code Online (Sandbox Code Playgroud)

它不起作用.

方法声明

<T> List<Session<T>> start(Criteria<T> criteria, List<Property<T>> orders)
Run Code Online (Sandbox Code Playgroud)

用法

Criteria<? extends Product> criteria = Utils.getCriteria();
List<Session<? extends Product>> sessions = null;
sessions = Service.start(criteria, null);
Run Code Online (Sandbox Code Playgroud)

错误信息

Type mismatch: cannot convert from List<Session<capture#2-of ? extends Product>> to List<Session<? extends Product>>
Run Code Online (Sandbox Code Playgroud)

如果我将方法声明更改为此,它可以工作.

<T> List<Session<? extends T>> start(Criteria<? extends T> criteria, List<Property<? extends T>> orders)
Run Code Online (Sandbox Code Playgroud)

为什么这个方法声明不起作用?

<T> List<Session<T>> …
Run Code Online (Sandbox Code Playgroud)

java generics extends wildcard

4
推荐指数
1
解决办法
817
查看次数

通用方法与通配符 - 编译错误

我有一个问题(简化):

public void method(List<List<?>> list){...}
Run Code Online (Sandbox Code Playgroud)

调用时给出了一个编译错误:

method(new ArrayList<List<String>>()); // This line gives the error
Run Code Online (Sandbox Code Playgroud)

在阅读了类似的线程之后,我明白如果我将方法签名重写为:

public void method(List<? extends List<?>> list){...}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,为什么以下工作呢?

public <T> void method(List<List<T>> list){...}
Run Code Online (Sandbox Code Playgroud)

java generics

1
推荐指数
1
解决办法
193
查看次数

泛型不能实例化`new HashMap <String,?>`.为什么?

为什么以下代码行在HashMap中出错?它并没有在任务的右侧使用外卡.

Map<String,?> map=new HashMap<String,?>();
Run Code Online (Sandbox Code Playgroud)

java generics

0
推荐指数
1
解决办法
7329
查看次数

标签 统计

generics ×5

java ×5

bounded-wildcard ×1

casting ×1

extends ×1

pecs ×1

super ×1

wildcard ×1