【问题标题】:How to make linked list function return specific class object instead of "Object" in Java?如何使链表函数返回特定的类对象而不是Java中的“对象”?
【发布时间】:2014-09-15 12:05:32
【问题描述】:

我是 Java 新手。 unvisited 和visited 是带有节点类对象元素的链表,我怎样才能让这个方法返回一个节点类对象而不是一个“对象”?我需要能够使用此函数的输出进入下一个未访问的拼图状态,但我无法访问 Node 类中的拼图状态,如果我尝试让函数返回一个 Node 它说它是一种类型不匹配(即使列表中的每个元素都是一个节点......)。请帮忙,谢谢。

/**
 * Removes last visited puzzle state from unvisited queue and adds it to the visited list. 
 * Returns next puzzle state to visit from unvisited queue. 
 */
public Object nextState() {
    // if unvisited is empty, return null (no solution)
    if (unvisited.size() == 0) { 
        return null;
    }
    // remove visited node from unvisited list & add to beginning of visited list
    visited.addFirst(unvisited.removeFirst());
    // visit next unvisited node
    Object first = unvisited.getFirst();
    return first;
}

【问题讨论】:

  • 向我们展示你的演员阵容。
  • 在将其转换为对象之前返回未访问的数据类型
  • 链表的返回类型有问题吗?向我们展示您如何初始化未访问的。

标签: java object linked-list


【解决方案1】:

将函数的返回类型改为Node,而不是像这样的对象

public Node nextState() {
// if unvisited is empty, return null (no solution)
    if (unvisited.size() == 0) { 
        return null;
    }
    // remove visited node from unvisited list & add to beginning of visited list
    visited.addFirst(unvisited.removeFirst());
    // visit next unvisited node
    Node first = unvisited.getFirst();
    return first;

【讨论】:

  • unvisited.getFirst() 仍然给我一个类型不匹配,它无法使用此代码从 Object 转换为 Node ...还有其他想法吗?
  • 你能把你所有的代码贴出来,这样我就可以看到那里的一切,以便我能进一步帮助你
【解决方案2】:
public Node nextState() {
// if unvisited is empty, return null (no solution)
    if (unvisited.size() == 0) { 
        return null;
    }
    // remove visited node from unvisited list & add to beginning of visited list
    visited.addFirst(unvisited.removeFirst());
    // visit next unvisited node
    Object first = unvisited.getFirst();
    if(first instance of Node){
        return (Node) first;
    }
    return null;
}

问题是您的unvisited.getFirst() 正在返回Object 类型的对象。所以你需要将它转换为 Node 类型并返回它。 'instance of' 是一种预防措施,如果你认为它总是返回一个 Node 类型的对象,你可以避免它

【讨论】:

  • 如果将泛型类型设置为 Node,它应该返回一个 Node,而不是一个 Object,不是吗? LinkedList<Node> unvisited = new LinkedList<Node> 应该修复它
  • 抱歉,忘记了方法括号,无法编辑我的帖子...LinkedList<Node> unvisited = new LinkedList<Node>() 应该修复它
  • @Maze 这不是 OP 的问题。所以没有提到那个解决方案。自从它工作以来,它很棒
  • @pratim_b 寻找最佳解决方案,但铸造并不是最好的。他的问题是什么会解决他的类型不匹配,所以这是一个解决方案。顺便说一句,它不起作用,因为instanceof 运算符是一个单词。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2015-08-07
  • 2018-12-18
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 2023-04-04
相关资源
最近更新 更多