我是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”以完成表达式/引用类型。
我很感激任何意见/建议!
答案 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
的对象,并传递其构造函数params
。 new x<generics>(params)
相同,但x
的通用类型为generics
。
最后,new int
完全无效 - 请参阅上面的解释。基元是不对象,这意味着初始化它们是没有意义的,因此无效。另外,你期望这个表达产生什么?某种类型为int
的内容,但您没有指定int
。正确的语法是文字:count = x;
其中x
是int
范围内的某个整数。
作为旁注,您的方法名称不清楚,并且可以在您声明它们的同一行中初始化变量以简化代码。
答案 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。