java generics编译错误,泛型类在栈上

标签 java generics

我不确定为什么这在 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);
  1. 找不到符号:方法 T()
  2. 必需:数组或java.lang.Iterable,找到:R
  3. 必需的 java.lang.Integer 找到:java.lang.String 原因:实参java.lang.String无法通过方法调用转换转换为java.lang.Integer

我想做的是创建一个类,可以计算可迭代容器中元素出现的次数。最初我只是想让它计算字符串中的字符,但我想我可以让它更通用。我认为其中一些可以在 C++ 中工作?

此外,FreqCounter<Character, Integer> counter = new FreqCounter<Character, Integer>(s) ;需要“更新”而不是在堆栈上声明?

最佳答案

T 是一种泛型类型,而不是真正的类型,泛型的局限性之一是您无法实例化新的类型(我认为您在这里试图这样做)。

你可以做的是分配、调用方法、保留引用、重复引用等等。

您可能真正想做的是将 T 集合从 MapkeySet 中取出。

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 泛型提供了许多与 C++ 模板相同的功能,但它们的工作方式却截然不同。与其他任何东西都不同的是,无论您实例化一个类有多少种不同的方式,您都只有一个 ArrayList 类。泛型用于编译器时类型检查,然后被删除,并且在运行时根本不存在。

关于java generics编译错误,泛型类在栈上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20561510/

相关文章:

java - 在intellij查看所有spring boot项目的端口

java - Jasper 报告 PDF 不带汉字

java - 编年史 map 上的迭代速度非常慢

java - 未经检查的覆盖(好吧,我似乎需要我的泛型方法)

java - 在部分抽象类中执行接受的泛型类型的方法 - Java

c# - 如何在 C# 的泛型方法中访问属性值?

java - 为什么在 beans 中创建 protected 属性被认为是一种不好的做法?

java - 继承类中的多个方法

java迭代器/可迭代子接口(interface)

java - Gson:解析泛型集合