插入维度以完成 Expression/ReferenceType
Insert Dimensions to complete Expression/ReferenceType
我是 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" 以完成 expression/referencetype。
我将不胜感激 input/advice!
首先,我建议您开始阅读 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
似乎这个片段在没有任何理解的情况下乱扔随机关键字 - 我建议 Java 教程。首先,泛型是装箱的主要用途之一。 boolean
或任何其他基元(您可以通过它们的标识符在 lower-case 中这一事实来识别它们,并且大多数 IDE 会突出显示它们) 不能 用作通用类型,并且必须使用它们的大写等效项(一个简单的包装器 class)。这里,使用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
.
范围内的某个整数
附带说明一下,您的方法名称不明确,变量可能会在您声明它们的同一行中初始化以简化代码。
您需要使用包装器对象而不是原始对象。使用布尔值而不是布尔值。
此错误的原因 - 您正试图将基本对象传递到泛型类型声明中,而泛型类型总是需要 Wrapper Class 对象。因此,请在您的代码中使用 'Boolean' 而不是 'boolean',即大写的 'B'。
泛型在编译时和运行时解析,它们没有关于代码中使用的泛型的上下文。然后将 Object 类型转换为针对泛型类型提供的 class 类型。现在原始和对象在 java 中都是完全不相关的实体。在 java 中不可能将对象直接时间转换为原始类型。由于这个原因,在泛型中使用原始类型是不允许的,eclipse 给出了这个警告。
访问Cannot Instantiate Generic Types with Primitive Types
Replace all type parameters in generic types with their bounds or Object if the type parameters are unbounded. The produced bytecode, therefore, contains only ordinary classes, interfaces, and methods.
类型参数,V
,其实也是K
,声明在HashMap<K,V>
,擦除后会被Object
代替,因为它们是无界的。虽然原始类型不能存储为 Object
.
绝对正确,但这里有一些关于错误消息的确切含义的推理。
错误是由于使用原始类型导致的,原始类型不能用作泛型类型参数。例如,List<boolean>
是错误的,而 List<Boolean>
是正确的。包装器 类 可用于包装原始值并产生引用类型,可与泛型一起使用。
插入维度?什么?
消息“Insert dimensions to complete expression/referenceType”可能是因为为了使表达式有效,这里唯一有效的标记是一组方括号。
例如,
HashMap<Person, boolean[]> marked;
编译正常。这是因为,与 boolean
不同,a boolean[]
is an object.
我是 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" 以完成 expression/referencetype。
我将不胜感激 input/advice!
首先,我建议您开始阅读 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
似乎这个片段在没有任何理解的情况下乱扔随机关键字 - 我建议 Java 教程。首先,泛型是装箱的主要用途之一。 boolean
或任何其他基元(您可以通过它们的标识符在 lower-case 中这一事实来识别它们,并且大多数 IDE 会突出显示它们) 不能 用作通用类型,并且必须使用它们的大写等效项(一个简单的包装器 class)。这里,使用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
.
附带说明一下,您的方法名称不明确,变量可能会在您声明它们的同一行中初始化以简化代码。
您需要使用包装器对象而不是原始对象。使用布尔值而不是布尔值。
此错误的原因 - 您正试图将基本对象传递到泛型类型声明中,而泛型类型总是需要 Wrapper Class 对象。因此,请在您的代码中使用 'Boolean' 而不是 'boolean',即大写的 'B'。
泛型在编译时和运行时解析,它们没有关于代码中使用的泛型的上下文。然后将 Object 类型转换为针对泛型类型提供的 class 类型。现在原始和对象在 java 中都是完全不相关的实体。在 java 中不可能将对象直接时间转换为原始类型。由于这个原因,在泛型中使用原始类型是不允许的,eclipse 给出了这个警告。
访问Cannot Instantiate Generic Types with Primitive Types
Replace all type parameters in generic types with their bounds or Object if the type parameters are unbounded. The produced bytecode, therefore, contains only ordinary classes, interfaces, and methods.
类型参数,V
,其实也是K
,声明在HashMap<K,V>
,擦除后会被Object
代替,因为它们是无界的。虽然原始类型不能存储为 Object
.
错误是由于使用原始类型导致的,原始类型不能用作泛型类型参数。例如,List<boolean>
是错误的,而 List<Boolean>
是正确的。包装器 类 可用于包装原始值并产生引用类型,可与泛型一起使用。
插入维度?什么?
消息“Insert dimensions to complete expression/referenceType”可能是因为为了使表达式有效,这里唯一有效的标记是一组方括号。
例如,
HashMap<Person, boolean[]> marked;
编译正常。这是因为,与 boolean
不同,a boolean[]
is an object.