【问题标题】:Cannot infer type arguments for ArraySortedMap<>无法推断 ArraySortedMap<> 的类型参数
【发布时间】:2020-04-03 11:51:25
【问题描述】:

我有一个关于泛型的任务。 -jdk.13.02,日食。

Map&lt;String, Person&gt; personByFirstName = new ArrayMap&lt;&gt;();

这行代码给了我错误:“无法推断 ArrayMap 的类型参数”

这是接口映射的标题:

public interface Map&lt;K, V&gt; extends Iterable&lt;Map.Entry&lt;K, V&gt;&gt;

这是 ArrayMap 类:

public class ArrayMap <K, V> implements Map<K, V>{
    @SuppressWarnings("unchecked")
    protected Entry<K, V>[] array = (Entry<K, V>[]) new Entry[16];
    protected int nEntries = 0;

    ArrayMap(){

    }

... 等等。 根据分配,@suppresswarnings 是必需的。

有没有人知道这里可能发生了什么,或者信息不足?我只是猜测问题出在类头/泛型上。 我尝试用谷歌搜索错误和其他内容,但没有找到任何东西。

谢谢

【问题讨论】:

  • 你实现了自己的Map接口吗?
  • 我通过以下方式解决了这个问题:1)首先使用类构造创建一个新项目,并将 ArrayMap 和 ArraySortedMap 的边界更改为 &lt;K extends Comparable &lt;? super K&gt;, V&gt; (现在有意义)和 2)复制代码新项目的类主体(步骤 1)对旧项目没有帮助,但我不知道为什么)

标签: java eclipse


【解决方案1】:

我刚刚自己实现了您的代码,它适用于我。

但是,我一开始确实看到了这个错误,我有这行:

Map<String, Person> personByFirstName = new ArrayMap<>();

这是因为我正在导入 java.util.Map。确保您导入自己的地图,而不是 java.util.Map。

【讨论】:

    【解决方案2】:

    你的代码对我来说很好用:personbyfirst name declaration

    继承人与您拥有的数组映射相同。所以我猜你要么以错误的方式实现了一个方法,要么搞砸了一个导入。尝试使用相同的代码创建一个新项目。

    import java.util.Collection;
    import java.util.Map;
    import java.util.Set;
    
    public class ArrayMap <K, V> implements Map<K, V> {
        @SuppressWarnings("unchecked")
        protected Entry<K, V>[] array = (Entry<K, V>[]) new Entry[16];
        protected int nEntries = 0;
    
        ArrayMap(){
    
        }
    
        @Override
        public int size() {
            return 0;
        }
    
        @Override
        public boolean isEmpty() {
            return false;
        }
    
        @Override
        public boolean containsKey(Object key) {
            return false;
        }
    
        @Override
        public boolean containsValue(Object value) {
            return false;
        }
    
        @Override
        public V get(Object key) {
            return null;
        }
    
        @Override
        public V put(K key, V value) {
            return null;
        }
    
        @Override
        public V remove(Object key) {
            return null;
        }
    
        @Override
        public void putAll(Map<? extends K, ? extends V> m) {
    
        }
    
        @Override
        public void clear() {
    
        }
    
        @Override
        public Set<K> keySet() {
            return null;
        }
    
        @Override
        public Collection<V> values() {
            return null;
        }
    
        @Override
        public Set<Entry<K, V>> entrySet() {
            return null;
        }
    }
    

    【讨论】:

    • 嘿,谢谢 - 创建一个新项目解决了我主课中提到的错误。关于以某种方式扩展 ArrayMap 的不同类 ArraySortedMap,我仍然有相同的错误。
    • 请点击我的答案附近的检查标记为已回答。我猜你错误地导入了类——尝试在 Eclipse 中使用自动导入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2014-08-07
    相关资源
    最近更新 更多