[英]Java Generics compile error in line class HanoiStack<T extends Comparable<T>> extends Stack<T>
[英]java generics compile error, generic class on the stack
我不确定为什么这在Java中不起作用:
import java.util.Map;
public class FreqCounter<T,R> {
private Map<T, Integer> hist;
private R item;
public FreqCounter (final R item_) {
item = item_;
}
public T getMostFrequentElement() {
T most_frequent_element = T();
Integer highestcount = 0;
for(T t : item) {
Integer count = hist.get(t);
if(count == null) {
hist.put(t, 1);
}
else {
hist.put(t, count + 1);
}
if(count + 1 > highestcount) {
most_frequent_element = t;
highestcount = count + 1;
}
}
return most_frequent_element;
}
}
class HelloWorld {
public static void main(String[] args) {
String s = "aaabbcccc";
FreqCounter<Character, Integer> counter = new FreqCounter<Character, Integer>(s);
}
}
问题线:
1. T most_frequent_element = T();
2. for(T t : item)
3. FreqCounter<Character, Integer> counter = new FreqCounter<Character, Integer>(s);
我试图做的是创建一个可以计算可迭代容器中元素出现次数的类。 最初我只是想让它计算一个字符串中的字符,但我想我可以使它更通用。 我认为其中一些可以在C ++中使用?
另外, FreqCounter<Character, Integer> counter = new FreqCounter<Character, Integer>(s)
; 需要被“新化”而不是在堆栈上声明?
T
是泛型类型,而不是真实类型,泛型的一个限制是你不能实例化一个新的(这是我认为你在这里尝试做的)。
你可以做的是分配,调用方法,保留引用,重复引用等。
你可能真正想要做的是从Map
的keySet
中拉出一组T
s。
T t = null;
int count = 0;
for (Entry<T, Integer> e: hist.entrySet()) {
if (e.getValue() > count) {
count = e.getValue();
t = e.getKey();
}
}
return t;
Java Generics提供了许多与C ++模板相同的功能,但它们以完全不同的方式工作。 除了其他任何东西,你只有一个ArrayList
类,无论你实例化多少种不同的方法。 泛型用于编译器时间类型检查,然后擦除,并且在运行时根本不存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.