Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有无效类的Java泛型类型get调用不会导致编译器错误_Java_Generics_Compiler Errors - Fatal编程技术网

带有无效类的Java泛型类型get调用不会导致编译器错误

带有无效类的Java泛型类型get调用不会导致编译器错误,java,generics,compiler-errors,Java,Generics,Compiler Errors,为什么这个Java代码没有生成任何编译器错误 Map<String, String> m = new HashMap<String, String>(); m.get(1); Map m=newhashmap(); m、 get(1); 我试图在映射字符串的映射中找到一个整数。这显然是一个编程错误 类似地,此代码也不会生成错误: Map<Integer, String> m = new HashMap<Integer, String>(); m

为什么这个Java代码没有生成任何编译器错误

Map<String, String> m = new HashMap<String, String>();
m.get(1);
Map m=newhashmap();
m、 get(1);

我试图在映射字符串的映射中找到一个整数。这显然是一个编程错误

类似地,此代码也不会生成错误:

Map<Integer, String> m = new HashMap<Integer, String>();
m.get("dd1");
Map m=newhashmap();
m、 获取(“dd1”);

所以Java编译器似乎并没有检查Map.get(Object)方法的参数类型。有什么想法吗?

Map
接口
get
方法将
Object
作为参数


两种情况下都没有错误。唯一的问题是它必须是一个对象,如果equals方法对传递的对象满意,则返回值。

Map
interface
get
方法将
Object
作为参数


两种情况下都没有错误。唯一的问题是它必须是一个对象,如果equals方法对传递的对象满意,则返回值。

通常在插入时进行检查。在
put
方法中


如果在
map
中没有插入错误的数据,则在使用
get
方法获取数据时无需进行检查

通常在插入时进行检查。在
put
方法中


如果在
映射中没有插入错误的数据,则在使用
获取
方法获取数据时无需进行检查

它将检查put操作和返回值(public V get(对象键)),而不是所有操作。

它将检查put操作和返回值(public V get(对象键)),不是所有的动作。

m.get(对象)参数对地图中的任何对象类型都有效。这样就不会给您带来编译错误。

m.get(Object)参数对地图中的任何对象类型都有效。因此,这不会给您带来编译错误。

正如您在()的文档中所看到的,get方法不使用泛型注入,而是使用对象作为输入参数。因此,您将在运行时得到一个ClassCastException。这与使用泛型类型注入的put方法不同。

正如您在()的文档中所看到的,get方法不使用泛型注入,而是使用对象作为输入参数。因此,您将在运行时得到一个ClassCastException。这与使用泛型类型注入的put方法不同

Java编译器似乎没有检查Map.get(Object)方法的参数类型

当然有。它会检查它是否是一个
对象。
没有其他需要检查的内容。存在“无效类”的唯一方法是使用基元类型

Java编译器似乎没有检查Map.get(Object)方法的参数类型


当然有。它会检查它是否是一个
对象。
没有其他需要检查的内容。存在“无效类”的唯一方法是使用基元类型。

还可以查看“这显然是编程错误”。不,不是。一个类的对象可以等于另一个类的对象。
整数和
字符串恰好不是这种情况,但一般情况下也会发生。另外,请看一看“这显然是编程错误”。不,不是。一个类的对象可以等于另一个类的对象。对于
整数
字符串
,情况恰好不是这样,但它可以在一般情况下发生。它与泛型没有任何关系。1998年也是如此。参数是一个
对象,
它被检查为
对象。
@EJP我的意思是,例如,如果OP使用
get(T)
,那么他可能会意识到将其作为对象的好处。我的第一点提到了你所说的。没有什么是
get(T)。
这个方法被定义为
get(Object)。
@EJP,其中T是Object,我的句子可能会误导。刚刚编辑过,你在拐弯抹角。这不仅仅是“误导”,而是错误的。没有
T,
也没有泛型。它与泛型没有任何关系。1998年也是如此。参数是一个
对象,
它被检查为
对象。
@EJP我的意思是,例如,如果OP使用
get(T)
,那么他可能会意识到将其作为对象的好处。我的第一点提到了你所说的。没有什么是
get(T)。
这个方法被定义为
get(Object)。
@EJP,其中T是Object,我的句子可能会误导。刚刚编辑过,你在拐弯抹角。这不仅仅是“误导”,而是错误的。没有
T,
也没有泛型。“所以在运行时你会得到一个ClassCastException。”不,你不会。不可能。阅读
get
方法的契约。“因此,您将在运行时获得ClassCastException。”不,您不会。不可能。阅读
get
方法的合同。问题与
put
无关问题与
put