我有一个没有任何参数初始化的列表。我将map
添加到该列表中。
然后,我创建了一个user
对象,在编译时将列表类型化为list
之后,我就知道了。
但是我很惊讶,我在运行时也没有得到那些错误。
import java.util.HashMap;
import java.util.List;
import java.util.Map;
class User {
private String name;
public String getName(){
return name;
}
}
public class Main {
public static void main(String[] args) {
Map<String, Object> map1 = new HashMap<>();
map1.put("name", "Bruce");
Map<String, Object> map2 = new HashMap<>();
map2.put("name", "Clark");
List list = List.of(map1, map2);
List<User> users = (List<User>) list;
System.out.println(users.get(0) instanceof Map);
}
}
产出:
true
我在这里漏掉了什么?
此外,当我尝试访问上述users
列表中的对象时,我确实得到了ClassCastException。
java.lang.ClassCastException: class java.util.HashMap cannot be cast to class User
使用第一个泛型前用法(list
),编译器不再执行类型安全泛型。
List list = List.of(map1, map2);
List<User> users = (List<User>) list;
System.out.println(users.get(0) instanceof Map);
因此,Users
只是Object
的列表
。
(无论如何,泛型强制转换不是真正的强制转换,更多的是为编译器提供的元数据,而不是承载代码--因为在运行时会删除类型。)
这是我的代码: 以下是我的任务要求: 一个参数化构造函数,将接收endpoint(作为点)、方向(作为int)和样式(作为字符串)。如果接收到的点或字符串为空,则抛出新的IllegalArgumentException( 我知道我检查样式是虚线、虚线还是双精度的部分出了问题,因为当我把它注释出来时,除了那个部分,所有的东西都工作了。就现在的情况而言,它只是在所有事情上抛出了非法的辩论例外。 我有一
抛出异常的行为是否可能抛出不同的异常? 为了抛出异常,必须(可选地)分配新对象,并调用其构造函数(隐式调用fillinstacktrace)。在某些情况下,听起来像addSupressed也被称为。那么如果没有足够的内存会发生什么呢?JVM是否需要预分配内置异常?例如,(1/0)会抛出OutOfMemoryError而不是ArithmeticException吗? 此外,构造函数是一个方法调用,因
问题内容: 如果没有明确指出它是String [],那么第一次调用someMethod怎么不编译? 使用数组初始化器创建String []数组很好,但是不能使用它传递参数。花括号是否以其他方式用于传递参数,从而使我期望其表现出轨? 编译器错误如下: Moo类型的someMethod(String [])方法不适用于参数(字符串,字符串,字符串) 问题答案: 您只能在声明数组变量或在数组创建表达式(
问题内容: 我有非常简单的代码: 我通过list.add(0,d)得到ConcurrentModificationException异常。所以总的来说,这是因为sublist()造成的。我很困惑,因为在sublist()的情况下,文档中说: 返回列表由该列表支持,因此返回列表中的非结构性更改会反映在此列表中, 反之亦然 。 您能解释一下渔获量在哪里吗? 问题答案: 这是原始列表的简单视图(请参阅此
当尝试使用neo4j-harness测试neo4j服务器时,我在构建嵌入式Neo4j服务器时收到异常 我的pom.xml是这样的:
这个问题以前的标题是“Spring5 Reactive WebClient消费HAL+JSON HATEOAS PagedResources”,但新的标题更合适。 下面的代码与RestTemplate完全兼容(参数化类型是从Spring DataREST提供的HateoAs/Hal PagedResource返回的): 上面调用服务方法的控制器代码是: 使用curl的结果是: 经过大量研究后,上面