gpt4 book ai didi

java - 泛型示例不起作用?替代方案或建议?

转载 作者:行者123 更新时间:2023-11-29 06:20:26 25 4
gpt4 key购买 nike

我在使用以下代码时遇到此错误:

The method getItemProperty(capture#2-of ? extends GenericTest.Item) in the type GenericTest.BaseContainer<capture#2-of ? extends GenericTest.Item> is not applicable for the arguments (GenericTest.Item)

import org.junit.Test;

public class GenericTest {

public class Item {
private String value;

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
}

public class WordItem extends Item {

}

public abstract class BaseContainer<T extends Item> {
public String getItemProperty(T item) {
return item.getValue();
}
}

public class Document extends BaseContainer<WordItem> {
}

public static class ContainerFactory {
public static BaseContainer<? extends Item> getContainer(Item item) {
return new GenericTest().new Document();
}
}

@Test
public void theTest(){
Item item = new WordItem();
BaseContainer<? extends Item> container = ContainerFactory.getContainer(item);
String str = container.getItemProperty(item); //this line does not compile
}
}

我将 Eclipse Helios 与 jdk 1.6.0_16 结合使用。

最佳答案

我认为问题在于 containerBaseContainer<? extends Item> ,即它是 Itemsome 子类型的容器.但是,编译器无法确保所讨论的子类型实际上是 Item。本身。事实上它是WordItem , 不是 Item .总体问题是您的通用参数使用不一致且不完整。

我可以通过这些修改使您的代码编译:

public class Document<T extends Item> extends BaseContainer<T> {
}

public static class ContainerFactory {
public static <T extends Item> BaseContainer<T> getContainer(T item) {
return new Test().new Document<T>();
}
}

@Test
public void theTest(){
WordItem item = new WordItem();
BaseContainer<WordItem> container = ContainerFactory.getContainer(item);
String str = container.getItemProperty(item);
}

这与 TrueSoft 在此处的建议不同 Document也变得通用 - 这可能不是你想要的(你没有提供相关信息),但至少这样在 getContainer() 中不需要不安全的强制转换。 .

关于java - 泛型示例不起作用?替代方案或建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3301401/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com