【问题标题】:Can't call custom method in class that implements Comparator无法在实现 Comparator 的类中调用自定义方法
【发布时间】:2012-10-11 00:49:16
【问题描述】:

我遇到了这个问题,我有一个 PiorityBlockingQueue 来对其中的项目进行排序。用户可以对添加到队列中的项目进行排序有几个选项。

我遇到的问题是尝试通过Item 的出现次数最多来排序队列。

比较的选择在MyQueue的构造函数中确定。但是(例如,低、中、高)的计数直到以后才确定。确定后,想从ItemComparator调用update(String lst)方法更新hashmap,使排序正确。

所以我的问题是我不能调用那个方法。我知道我错过了一些东西,但我无法弄清楚。有什么帮助吗?也许有比我现在做的更好的设计?

 public class ItemComparator implements Comparator<Item>
    {        
         public void update(String lst){
             test = lst;
         }

         public int compare(Item o1, Item o2) {
            HashMap<String,Integer> priority = new HashMap<>();
            priority.put("LOW", 1);
            priority.put("MEDIUM", 2);
            priority.put("HIGH", 3);

            if (priority.get(o1.getPriority()) > priority.get(o2.getPriority())) {
                return -1;
            }
            if (priority.get(o1.getPriority()) < priority.get(o2.getPriority())) {
                return 1;
            }
            return 0;
         }    
    }

此语句不适用于此类 comparer.update(aString);

public class MyQueue implements AQueue{

    private Comparator<Ticket> comparator;
    private PriorityBlockingQueue<Ticket> listOfTickets;
    private String policy;

    BlockingQImpl(String processingPolicy) throws InvalidDataException {
        setPolicy(processingPolicy.toUpperCase());
        setComparator(policy);
    }

    private void setComparator(String policy) throws InvalidDataException {
        if (policy.equals("THIS")) {
            comparator = new ItemComparator(countString);
        } 
        listOfTickets = new PriorityBlockingQueue<>(10, comparator);
    }

    public void addList(int id) {
        ticks.add(id)
        comparator.update(aString);
    }
}

【问题讨论】:

  • 它在 MyQueue 中的一种方法中,我已经更新以显示它
  • 您的代码看起来仍然不正确。 BlockingQImpl 看起来像一个构造函数,但与类名 MyQueue 不匹配。你能确保你发布了正确的代码吗?还有错误信息。
  • ItemComparator中的update方法。如果是,那么您可能需要将private Comparator&lt;Ticket&gt; comparator; 更改为private ItemComparator comparator;

标签: java priority-queue comparator


【解决方案1】:

我认为您的问题是comparator.update(aString); 的编译错误对吗?

这是因为您已将comparator 声明为Comparator&lt;Ticket&gt;,这意味着您将其“视为”为Comparator,而在Comparator 中,没有update() 方法。

您应该将其声明为ItemComparator

private ItemComparator comparator;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2016-12-18
    • 2022-08-24
    • 2014-10-12
    相关资源
    最近更新 更多