Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 铸造(不需要)_Java_Arrays_Generics_Methods - Fatal编程技术网

Java 铸造(不需要)

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 =

我编写了一个方法,该方法返回一个ArrayList,其中包含队列中包含的值。queue ArrayList由节点对象填充,该类有一个类型为T的参数value,这是我需要检索的数据。我使用了getValue方法来执行此操作:

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());
}