Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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_Wildcard_Generic Method - Fatal编程技术网

Java 方法中的通配符参数

Java 方法中的通配符参数,java,wildcard,generic-method,Java,Wildcard,Generic Method,我定义了以下类: public class priorityQueue<T extends Comparable<T>> implements Iterable<T> 如何声明复制元素的方法?因为此时已定义了T,请尝试此操作 public static<T extends Comparable<T>> void copy(Collection<T> source, priorityQueue<T> de

我定义了以下类:

 public class priorityQueue<T extends Comparable<T>> implements Iterable<T> 

如何声明复制元素的方法?

因为此时已定义了
T
,请尝试此操作

public static<T extends Comparable<T>> 
 void copy(Collection<T> source, priorityQueue<T> dest) {}
公共静态
无效副本(集合源,优先级队列目标){}

您试图在静态方法中使用未定义类型的通配符。由于是静态的,类的通配符定义无效,您需要在方法中指定它们

添加另一个通配符,使该方法以如下方式结束:

public static<T, P extends PriorityQueue<Comparable<T>>>  void copy(Collection<T> source, P dest) { 
    for(T elem:source){
        dest.Push(elem);
    }
}
公共静态无效副本(收集源,目的地){
for(T元素:源){
目的推送(elem);
}
}

按照Java中的惯例,类名以大写字母开头(因此优先队列是首选),方法名以小写字母开头,因此方法Push应该是Push。我不使用Java.util中的方法,也不想覆盖它们,我定义了自己的优先队列,使用我自己的方法。如果您有不同的包位置,则不会使用相同的名称覆盖PriorityQueue。此外,更喜欢使用与标准库中不同的名称,例如MyPriorityQueue。任何人,包括将来的你,都会喜欢这段代码。你试过了吗?它不会编译。是的,我试过了,是的,它会编译。我最近已经用过好几次了。我还注意到,对于OP的要求来说,这太过分了,@Elliot Frisch的答案要简单得多(包括我忘记的“extends Comparable”),我不知道你的方法是如何编译的。用于
P
push
方法需要一个
可比较的
,而您只是从
集合中推送元素,其中
T
没有任何边界。
public static<T>  void copy(Collection<T> source, priorityQueue<T extends Comparable<T>> dest) 
Syntax error on token "extends",, expected
public static<T extends Comparable<T>> 
 void copy(Collection<T> source, priorityQueue<T> dest) {}
public static<T, P extends PriorityQueue<Comparable<T>>>  void copy(Collection<T> source, P dest) { 
    for(T elem:source){
        dest.Push(elem);
    }
}