gpt4 book ai didi

使用泛型类型的 Java 构造函数

转载 作者:搜寻专家 更新时间:2023-10-31 08:14:24 24 4
gpt4 key购买 nike

我很难全神贯注于 Java 泛型类型。这是一段简单的代码,在我看来应该可以工作,但我显然做错了什么。

Eclipse 在 BreweryList.java 中报告这个错误:

The method breweryMethod() is undefined for the type <T>

想法是用作为 Brewery 类子类的对象实例填充一个 Vector,因此调用类似于:

BreweryList breweryList = new BreweryList(BrewerySubClass.class, list);

BreweryList.java

package com.beerme.test;

import java.util.Vector;

public class BreweryList<T extends Brewery> extends Vector<T> {
public BreweryList(Class<T> c, Object[] j) {
super();
for (int i = 0; i < j.length; i++) {
T item = c.newInstance();

// breweryMethod() is an instance method
// of Brewery, of which <T> is a subclass (right?)

c.breweryMethod();

// "The method breweryMethod() is undefined
// for the type <T>"
}
}
}

Brewery.java

package com.beerme.test;

public class Brewery {

public Brewery() {
super();
}

protected void breweryMethod() {
}
}

BrewerySubClass.java

package com.beerme.test;

public class BrewerySubClass extends Brewery {
public BrewerySubClass() {
super();
}

public void brewerySubClassMethod() {
}
}

我确定这是一个完整的泛型菜鸟问题,但我被卡住了。感谢您提供任何提示!

最佳答案

item.breweryMethod();

代替

c.breweryMethod();

您正试图调用 Class<T> 上的方法,不在实例上。

实际上,Eclipse 报告

The method breweryMethod() is undefined for the type Class<T>

从这条消息中应该清楚发生了什么。

(在你修复它之后,你还必须处理 Class.newInstance() 声明的异常)

正如 Tom Hawtin 在评论中所建议的那样,您最好使用 factory method而不是在您的方法中使用反射来创建您的对象。

关于使用泛型类型的 Java 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2457139/

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