可能重复:
基于参数的真实类型选择重载方法
当参数为文字空值时,如何选择重载方法?
当我执行下面的代码时,我得到以下输出:
名为“”的字符串参数为“”的方法。。。"
为什么?
public class StringObjectPOC {
public static void test(Object o) {
System.out.println("Method with Object argument Called ...");
}
public static void test(String str){
System.out.println("Method with String argument Called ...");
}
public static void main(String[] args) {
StringObjectPOC.test(null);
}
}
我试过这个:
Test2.class
public class Test2{}
Test3.class
public class Test3 extends Test2{
}
Test.class
public class Test{
public static void print(Object obj){
System.out.println("Object");
}
public static void print(Test2 obj){
System.out.println("test 2");
}
public static void print(Test3 obj){
System.out.println("Test 3");
}
public static void main(String[]args){
Test.print(null);
}
}
它打印出测试3
就像在您的场景中一样,这意味着如果一个方法被重载(并且当传递null时),它将识别具有最子参数的方法。
Object->Test->Test2
或者在您的情况下:
Object->String
如果我没记错的话,Java拼图中也有类似的例子。
null可以是字符串类型或对象类型。但是JVM总是会选择更精确的方法。
在这种情况下,
String
比Object
更准确。(String
是Object
,但Object
可能不是String
)。
这样写代码不是一个好习惯。尝试强制转换参数以匹配所需的方法,如
public class StringObjectPOC {
public static void test(Object o) {
System.out.println("Method with Object argument Called ...");
}
public static void test(String str){
System.out.println("Method with String argument Called ...");
}
public static void main(String[] args) {
StringObjectPOC.test((Object)null);
}
}
调用中的null与test()签名匹配。您必须强制转换null以确保它调用其中一个。
问题内容: 出于好奇,我尝试了这个例子。 输出为“字符串”。我想知道JVM决定在什么基础上调用以String作为参数而不是Object的方法。 问题答案: 只要可以将多个重载方法应用于参数列表,就会使用最具体的方法。 在这种情况下,传递时都可以调用这两种方法,因为“空类型”既可以分配给也可以分配给。采取的方法更加具体,因此将被选择。
我有一个字符串格式的JSON值,如下所示。 现在,如果我试着按如下方式映射它,它会工作并且映射得很好。 但是我想将其映射到自定义数据类,如下所示。 当我这样做时,vo的结果是null。 有关数据类的结构,请参阅以下内容。 请告诉我我做错了什么。谢谢
我对编码非常陌生,刚刚接触过静态方法,所以我为这些愚蠢的错误提前道歉。在main下调用该方法时,该方法应该显示一个三角形,但我得到的控制台是空的,没有输出。但是,如果我将此写在main下: 然后,三角形将显示在控制台中,但是对于这个赋值,字符串/三角形必须仅通过使用来调用
我想出了场景&不能理解背后的逻辑?我只听懂了第一个,其余两个听不懂?请解释一下它在内部是如何工作的?
问题 你有一个字符串形式的方法名称,想通过它调用某个对象的对应方法。 解决方案 最简单的情况,可以使用 getattr() : import math class Point: def __init__(self, x, y): self.x = x self.y = y def __repr__(self): return 'P
既然String是JAVA中的一个类,那么在不使用新运算符的情况下,test1如何成为String对象呢?另外,当使用新运算符时,内存会分配给新的String(“testing”),那么在test1的情况下,内存是如何分配的呢?另外,当字符串被临时存储时,如果两个字符串具有相同的值,引用的是什么,那么该字符串在字符串临时存储池中存储一次?