java - 无法实例化 LinqMap 类型

标签 java

自 2011 年以来,我一直是一名 Java 开发人员,通常可以毫无问题地解决这些错误,因为我已经见过很多次了。即使是这个我也见过很多,我通常知道如何解决它。

然而,今天我遇到了一个奇怪的问题,从它的含义来看,我无法理解问题的真正原因。

所以我是一名模组制作者,特别是 Minecraft,在本例中是 Bukkit。然而,这与问题完全无关,因为这与语言本身有关,而不是用它创建的任何库。

所以错误。

Cannot instantiate the type LinqMap<Integer, ? extends ItemStack>

通常当我看到这个时,我认为这是因为我正在尝试使用的类型是一个接口(interface),是抽象的,或者指定的构造函数是私有(private)的或未定义的,但是其中一些确实有自己的错误,但这是我通常检查的内容。

我还注意到在 Stack Overflow 上有很多此错误的副本,但其中大多数似乎指向实例化 List 的方向,它是一个接口(interface),或者一些自定义类是抽象的。如果不是因为我已经检查过这个事实,并且事实证明这不是问题,这将是相同的。

所以我最初尝试使用的这段代码看起来如下

HashMap<Integer,? extends ItemStack> stackmap = new LinqMap<Integer,? extends ItemStack>(player.getInventory().all(prototype.getType()));

现在,这有点难以发现,所以我尝试缩小范围。我注意到了 LinqMap 的构造函数,它要么不带参数,要么带 Map<K,V>。 . 还要指出的是 all返回 HashMap<Integer, ? extends ItemStack>如果你想知道它返回了什么。无论如何,所以我再次尝试使用以下代码

Map<Integer,? extends ItemStack> map = player.getInventory().all(prototype.getType());
HashMap<Integer,? extends ItemStack> stackmap = new LinqMap<Integer,? extends ItemStack>(map);

这仍然没有用,所以我尝试使用最终像这样的空构造函数

HashMap<Integer,? extends ItemStack> stackmap = new LinqMap<Integer,? extends ItemStack>();

这仍然以错误告终,这让我很惊讶,因为对象是一个类,它除了是公共(public)的之外没有任何修饰符,而且包括无参数构造函数在内的两个构造函数都是空的。

那么这里有什么问题呢?为什么我不能在代码明确允许的情况下创建 LinqMap 的实例?

另外,这里有一小段类供引用,它是我定制的,是 C# 的 Linq 端口(未发布)

import java.util.HashMap;
import java.util.Map;

public class LinqMap<K,V> extends HashMap<K,V> {

    /**
     * 
     */
    private static final long serialVersionUID = 1796259800183459223L;

    public LinqMap(final Map<K,V> other) {
        for (Map.Entry<K, V> item : other.entrySet()) {
            this.put(item.getKey(), item.getValue());
        }
    }

    public LinqMap() {
    }

    /* ... */

}

最佳答案

在 Java 中,不允许直接实例化通配符类型?。如果您至少使用 Java 7 进行编译,那么我建议您简单地利用 diamond inference :

Map<Integer, ? extends ItemStack> map = player.getInventory().all(prototype.getType());

HashMap<Integer, ? extends ItemStack> stackmap = new LinqMap<>(map);

关于java - 无法实例化 LinqMap 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48592406/

相关文章:

java - 是否可以使用 Java API [google-project-tango] 获取深度帧

java - 单例、静态或接口(interface)作为常量字段?

java - transformClassesWithDexBuilderForDebug 卡住

java - 使用 SpringBoot、Spring-MVC 和 Maven 的 WebApp 中不包含 WEB-INF

java - Gson 反序列化 - 尝试将 JSON 解析为对象

自动增长并可重复使用的 Java Char Buffer

java - 运行时 JDBC 程序中的 MySQLNonTransientConnectionException

java - 查找/替换高亮替换词 Netbeans/Java

java - 在 Jersey 2.22.2 中获取客户端 ip

java - FileWriter 没有将运行时整数值插入到文件中?