我是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条答案
按热度按时间imzjd6km1#
此错误的原因-您试图将一个基元对象传递到泛型类型声明中,而泛型类型总是期望一个 Package 类对象。因此,请在代码中使用“boolean”而不是“boolean”,即大写字母中的“b”。
b09cbbtk2#
您需要使用 Package 器对象而不是原语。使用布尔值而不是布尔值。
yws3nbqq3#
泛型在编译时和运行时解析,它们与代码中使用的泛型无关。对象被转换为针对泛型类型提供的类类型。在java中,原语和对象都是完全不相关的实体。在java中,对象到基元类型的直接时间强制转换是不可能的。因此,不允许在generic中使用基元类型,eclipse会给出此警告。
62o28rlo4#
satyendra sharma的回答是绝对正确的,但是这里有一些关于错误消息到底在说什么的推理。
错误是由使用基元类型引起的,基元类型不能用作泛型类型参数。例如,
List<boolean>
是不正确的List<Boolean>
是正确的。 Package 类可用于 Package 原语值并生成引用类型,该类型可与泛型一起使用。插入尺寸?什么?
消息“insert dimensions to complete expression/referencetype”可能是因为为了使表达式生效,这里唯一有效的标记是一组方括号。
例如,
会很好的。这是因为,不像
boolean
,一个boolean[]
是一个对象。x6yk4ghg5#
首先,我建议您开始阅读java教程。。。
https://docs.oracle.com/javase/tutorial/java/toc.html
针对您的问题:
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
https://docs.oracle.com/javase/tutorial/java/javaoo/objectcreation.html
https://docs.oracle.com/javase/tutorial/java/javaoo/variables.html
至于您的代码,您可以在声明变量时立即初始化它们:
omhiaaxx6#
这段代码似乎是在毫无理解的情况下随意使用关键字——我建议使用java教程。首先,泛型是装箱的主要用途之一。
boolean
或者任何其他原语(您可以通过它们的标识符是小写的并且大多数ide将突出显示它们的事实来识别它们)不能用作泛型类型,必须使用它们的大写等价物(一个简单的 Package 类)。这里,使用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
.顺便说一句,您的方法名称不清楚,变量可能会在声明它们的同一行中初始化,以简化代码。
5anewei67#
访问不能用基元类型示例化泛型类型
如果泛型类型中的类型参数是无界的,则用它们的边界或对象替换所有类型参数。因此,生成的字节码只包含普通类、接口和方法。
类型参数,
V
,实际上也是K
,在中声明HashMap<K,V>
,将替换为Object
擦除之后,因为它们是无界的。而基元类型不能存储为Object
.