关于IDEA在debug时私自调用toString()方法的问题,会引起dubbo异常

本文介绍了在工程启动时Dubbo抛出的关于toString方法异常,解释了IDEA debug时toString调用的特殊情况,以及如何避免因误调导致AbstractConfig初始化问题。提供了解决方法和配置建议。

工程启动时,dubbo抛出异常如下:

<dubbo:reference interface="" /> interface not allow null!

解决方式:

1,IDEA在debug时,当debug到某个对象时,会调用对象的toString()方法,用来在debug界面显示对象信息。

2,IDEA调用toString()方法时,即使在toString()方法中设置了断点,该断点也不会被触发,也就是说,开发者多数情况下不会知道toString()方法被调用了。

3,多数情况下调用一下toString()方法没有什么问题,但是也有例外,比如重写了toString()方法的类,随意的调用toString()方法会导致未知的问题。

4,比如Dubbo的AbstractConfig类,对这个类的debug会导致其子类ReferenceConfig的initialized属性错误的被修改为true,进而无法正确的生成Dubbo代理。

5,IDEA在debug时调用toString()方法的情况是可以在配置中关掉的,配置位置是:

红框的 勾 去掉就可以了。

 

转载至:https://blog.youkuaiyun.com/lkforce/article/details/90479650

 

在比较调用 `toString` 方法通常是为了将对象转换为字符串形式,以便进行基于字符串的比较操作。 在 Java 中,当使用 `print` 或 `println` 方法输出对象,会自动调用 `toString` 方法。这是因为在调用 `print` 或 `println` 方法,会先调用 `String` 的静态方法 `ValueOf()`。在 `valueOf` 方法中,会判断形参 `obj` 是否为空,若为空则返回 `"null"`,若不为空则调用 `obj` 的 `toString` 方法。如果 `obj` 对象所在类重写了 `toString()` 方法,则调用重写后的方法;若没有重写,则调用父类 `Object` 里的 `toString` 方法,输出数据类型和地址值 [^2]。 在比较场景中,当需要比较对象的字符串表示形式,就会调用 `toString` 方法。例如,比较两个对象以查看它们的文本表示是否相同。如果不调用 `toString` 方法,直接比较对象引用,比较的是对象在内存中的地址,而不是对象的内容。通过调用 `toString` 方法,可以将对象转换为字符串,进而比较字符串内容是否一致。 ```java class MyClass { private int value; public MyClass(int value) { this.value = value; } @Override public String toString() { return String.valueOf(value); } } public class Main { public static void main(String[] args) { MyClass obj1 = new MyClass(10); MyClass obj2 = new MyClass(10); // 比较对象的字符串表示 boolean isEqual = obj1.toString().equals(obj2.toString()); System.out.println("对象的字符串表示是否相等: " + isEqual); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值