Java 铸造(不需要)
我编写了一个方法,该方法返回一个ArrayList,其中包含队列中包含的值。queue ArrayList由节点对象填充,该类有一个类型为T的参数value,这是我需要检索的数据。我使用了getValue方法来执行此操作:Java 铸造(不需要),java,arrays,generics,methods,Java,Arrays,Generics,Methods,我编写了一个方法,该方法返回一个ArrayList,其中包含队列中包含的值。queue ArrayList由节点对象填充,该类有一个类型为T的参数value,这是我需要检索的数据。我使用了getValue方法来执行此操作: public T getValue() { return value; } (该类的类型为)。 “我的队列”类中的方法如下: public ArrayList getArray() { ArrayList < T > onlyValues =
public T getValue() {
return value;
}
(该类的类型为public ArrayList getArray() {
ArrayList < T > onlyValues = new ArrayList<>();
for (int i = 0; i < queue.size(); i++) {
T tmp = (T)((queue.get(i)).getValue());
onlyValues.add(tmp);
}
return onlyValues;
}
publicArrayList getArray(){
ArrayListonlyValue=新的ArrayList();
对于(int i=0;i
如果我在没有强制转换(T)的情况下执行它,我会得到以下错误:错误:不兼容的类型:对象无法转换为T
为什么?我知道方法add接受类型为T的对象,我在类节点中的方法返回一个T元素。类型和属性中包含泛型类型的对象之间存在差异。您的ArrayList需要添加对象。要解决此问题,请改用此选项:
onlyValue.add(new Node<T>(tmp));
onlyValue.add(新节点(tmp));
如果将队列
变量声明为
private ArrayList <Node> queue;
那么你就不需要施放:
T tmp = queue.get(i).getValue();
您还缺少方法返回类型上的type参数
public ArrayList<T> getArray() {
publicArrayList getArray(){
请注意,使用增强的for循环会更容易:
for (Node<T> node : queue) {
onlyValues.add(node.getValue());
}
for(节点:队列){
onlyValues.add(node.getValue());
}
Stack Overflow snippets仅适用于JavaScript/HTML/CSS问题,不适用于Java。我已将其编辑掉。这取决于queue.get(I)
返回的内容。如果queue.get(I)返回对象(它看起来是什么样子)然后您需要强制转换。这是您的类还是来自库?它返回一个节点对象。通过它我可以访问getValue()返回T对象的方法我猜您的代码中其他地方有原始类型问题,因为您在这段代码中有。如果有,请修复这些问题。然后查看错误消息。请显示queue
的声明。停止使用原始泛型类型。在IDE中打开警告,这样您就不会意外使用原始泛型类型a增益。返回类型上缺少类型参数。新的ArrayList必须仅包含通过getValue()方法获取的元素列表,而不是节点对象。
for (Node<T> node : queue) {
onlyValues.add(node.getValue());
}