binarySearch具有泛型并捕获
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了binarySearch具有泛型并捕获相关的知识,希望对你有一定的参考价值。
我有任务:
public interface Task
然后我有了那些实现:
public interface Task__Init extends Task
void init(Element e);
public interface Task__Hit_Test extends Task
boolean hit_test(Element e, float x, float y);
public interface Task__Draw extends Task
void draw(Element e);
我还有一个可以容纳这些实现实例的类:
static public class Task_Holder<T extends Task>
public int task_id;
public Task_Type type;
public T task;
// ...
然后我有一个包含这些的类,最后一个ArrayList包含所有这些(all_task_holders)
static public class Implementation_Context
public HashMap<String, ArrayList<Task_Holder<Task__Init>>> init_solvers = new HashMap<>();
public HashMap<String, ArrayList<Task_Holder<Task__Draw>>> draw_solvers = new HashMap<>();
public HashMap<String, ArrayList<Task_Holder<Task__Hit_Test>>> hit_test_solvers = new HashMap<>();
public ArrayList<Task_Holder<? extends Task>> all_task_holders = new ArrayList<>();
// ...
现在出现问题之一:
static public Task_Holder<?> find_task_holder(int task_id)
Comparator<Task_Holder<?>> comparator = (a, b)->
if (a.task_id < b.task_id) return -1;
if (a.task_id > b.task_id) return 1;
return 0;
;
Collections.sort(ctx.implementation.all_task_holders, comparator);
Task_Holder<?> key = new Task_Holder<>();
key.task_id = task_id;
int index = Collections.binarySearch(ctx.implementation.all_task_holders, key);
for (Task_Holder<?> th : ctx.implementation.all_task_holders)
if (th.task_id == task_id)
return th;
assert false; // should we find things that are not there?
return null;
对于binarySearch,我得到了(在此将其设为代码块,否则stackoverflow出于某些原因会删除单词?):
The method binarySearch(List<? extends Comparable<? super T>>, T) in the type Collections is not applicable for the arguments (ArrayList<sfjl_ui.Task_Holder<?>>, sfjl_ui.Task_Holder<capture#6-of ?>)
我不知道如何解决此问题。每次尝试都会破坏其他东西(例如,我破坏了高3行的排序)。感觉就像用其他信用卡还清信用卡债务一样,您永远赢不了。
我该如何解决?
答案
通过比较器as an additional argument:
int index = Collections.binarySearch(ctx.all_task_holders, key, comparator);
以上是关于binarySearch具有泛型并捕获的主要内容,如果未能解决你的问题,请参考以下文章