插入维度以完成表达式/引用类型

vu8f3i0k  于 2021-07-12  发布在  Java
关注(0)|答案(7)|浏览(374)

我是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”以完成表达式/引用类型。
如有任何意见/建议,我将不胜感激!

imzjd6km

imzjd6km1#

此错误的原因-您试图将一个基元对象传递到泛型类型声明中,而泛型类型总是期望一个 Package 类对象。因此,请在代码中使用“boolean”而不是“boolean”,即大写字母中的“b”。

b09cbbtk

b09cbbtk2#

您需要使用 Package 器对象而不是原语。使用布尔值而不是布尔值。

yws3nbqq

yws3nbqq3#

泛型在编译时和运行时解析,它们与代码中使用的泛型无关。对象被转换为针对泛型类型提供的类类型。在java中,原语和对象都是完全不相关的实体。在java中,对象到基元类型的直接时间强制转换是不可能的。因此,不允许在generic中使用基元类型,eclipse会给出此警告。

62o28rlo

62o28rlo4#

satyendra sharma的回答是绝对正确的,但是这里有一些关于错误消息到底在说什么的推理。
错误是由使用基元类型引起的,基元类型不能用作泛型类型参数。例如, List<boolean> 是不正确的 List<Boolean> 是正确的。 Package 类可用于 Package 原语值并生成引用类型,该类型可与泛型一起使用。

插入尺寸?什么?

消息“insert dimensions to complete expression/referencetype”可能是因为为了使表达式生效,这里唯一有效的标记是一组方括号。
例如,

HashMap<Person, boolean[]> marked;

会很好的。这是因为,不像 boolean ,一个 boolean[] 是一个对象。

x6yk4ghg

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
至于您的代码,您可以在声明变量时立即初始化它们:

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

omhiaaxx6#

这段代码似乎是在毫无理解的情况下随意使用关键字——我建议使用java教程。首先,泛型是装箱的主要用途之一。 boolean 或者任何其他原语(您可以通过它们的标识符是小写的并且大多数ide将突出显示它们的事实来识别它们)不能用作泛型类型,必须使用它们的大写等价物(一个简单的 Package 类)。这里,使用 HashMap<Person, Boolean> .
我不知道这是什么意思 marked = new marked... -显然, marked 不是类型,不能在此上下文中使用。 new x(params) 初始化类型为的对象 x ,传递其构造函数 params . new x<generics>(params) 相同,但为的泛型类型 xgenerics .
最后, new int 一点也不正确-见我上面的解释。原语不是对象,这意味着初始化它们是没有意义的,因此是无效的。另外,您希望这个表达式产生什么结果?某种类型的东西 int ,但您没有指定 int . 正确的语法是文字: count = x; 哪里 x 是范围内的整数 int .
顺便说一句,您的方法名称不清楚,变量可能会在声明它们的同一行中初始化,以简化代码。

5anewei6

5anewei67#

访问不能用基元类型示例化泛型类型
如果泛型类型中的类型参数是无界的,则用它们的边界或对象替换所有类型参数。因此,生成的字节码只包含普通类、接口和方法。
类型参数, V ,实际上也是 K ,在中声明 HashMap<K,V> ,将替换为 Object 擦除之后,因为它们是无界的。而基元类型不能存储为 Object .

相关问题