JAVA“插入Dimensions以完成Expression / ReferenceType”

时间:2016-01-19 19:34:11

标签: java generics

我是Java的新手。

我已从我的BFS代码中提供了一个简短的片段。

public int bfs(Person p, Person q) {
    private HashMap<Person, boolean> marked;
    private int count;

    marked = new marked<Person, boolean>();
    count = new int;
}

根据Eclipse,我在最后4行中都有错误。

语法错误:插入“Dimensions”以完成表达式/引用类型。

我很感激任何意见/建议!

7 个答案:

答案 0 :(得分:11)

此错误的原因 - 您正在尝试将原始对象传递给泛型类型声明,而泛型类型始终需要Wrapper Class对象。如上所述,使用&#39;布尔&#39;而不是布尔&#39;在你的代码中。

答案 1 :(得分:6)

您需要使用包装器对象而不是基元。使用布尔而不是布尔值。

答案 2 :(得分:1)

泛型在编译时和运行时解析,它们与代码中使用的泛型无关。然后,将对象类型转换为针对通用类型提供的类类型。现在,原始和对象在Java中都是完全不相关的实体。在Java中,无法将Object直接广播到基本类型。因此,不允许在泛型中使用基本类型,而eclipse会发出此警告。

答案 3 :(得分:0)

首先我建议你开始阅读Java教程......

https://docs.oracle.com/javase/tutorial/java/TOC.html

具体针对您的问题:

至于你的代码,你可以在声明它们时初始化你的变量:

    Map<Person, Boolean> marked = new HashMap<Person, Boolean>();
    int count = 0; // or whatever initial value

答案 4 :(得分:0)

看起来这个片段在没有任何理解的情况下抛出随机关键字 - 我建议使用Java教程。首先,仿制药是拳击的主要用途之一。 boolean或任何其他原语(您可以通过它们的标识符是小写的并且大多数IDE将突出显示它们来识别它们)不能用作泛型类型,并且它们的大小写必须使用等价物(一个简单的包装类)。在这里,使用HashMap<Person, Boolean>

我不确定marked = new marked...的含义 - 显然,marked不是一种类型,不能在此上下文中使用。 new x(params)初始化类型为x的对象,并传递其构造函数paramsnew x<generics>(params)相同,但x的通用类型为generics

最后,new int完全无效 - 请参阅上面的解释。基元是对象,这意味着初始化它们是没有意义的,因此无效。另外,你期望这个表达产生什么?某种类型为int的内容,但您没有指定int。正确的语法是文字:count = x;其中xint范围内的某个整数。

作为旁注,您的方法名称不清楚,并且可以在您声明它们的同一行中初始化变量以简化代码。

答案 5 :(得分:0)

访问Cannot Instantiate Generic Types with Primitive Types

  

将通用类型中的所有类型参数及其边界或对象替换为无边界的对象。因此,产生的字节码仅包含普通的类,接口和方法。

V中声明的类型参数K,实际上也是HashMap<K,V>,在擦除后将被Object替换,因为它们是无界的。虽然原始类型不能存储为Object

答案 6 :(得分:0)

Satyendra Sharma's answer绝对正确,但这是错误消息确切含义的一些原因。

该错误是由使用原始类型引起的,该类型不能用作泛型类型参数。例如,List<boolean>是错误的,而List<Boolean>是正确的。包装器类可用于包装原始值并产生引用类型,该引用类型可与泛型一起使用。

插入尺寸?什么?

“插入维以完成表达式/ referenceType”消息可能是因为为了使表达式生效,此处唯一有效的标记是一组方括号。

例如,

HashMap<Person, boolean[]> marked;

只会编译正常。这是因为与boolean不同,a boolean[] is an object