如何防止将对象自动转换为字符串。
|
我有一堂课,看起来像下面这样:
public class FileEntry {
private String name;
public FileEntry (String name) {
this.name = name;
}
}
void foo(String arg){};
foo(\"string\" + new FileEntry(\"\")); // How to get a compile error here
如何使java给我一个编译错误,而不是自动将Object转换为String?
没有找到相关结果
已邀请:
11 个回复
伐教爸
然后你打电话
将会出现编译器错误。看这里 仅当您执行类似操作时,才会调用toString()
亲奋漏
寒健
与强制转换不同-您需要注意不同之处。 您可以重写ѭ4不仅引发异常,而且不推荐使用:
仅当表达式的编译时类型为
时,这才对编译时有所帮助。在大多数配置下,这也只是警告。 这也可能会使尝试自动调用
的调试器产生混乱,等等。
马口
梦话快家腹
参数的重载方法,而这种方法通常会在参数上调用
。 您无法采取任何措施来防止使用重载的方法-毕竟它们是故意放置的。
碧肮械淌设
的调用。 (实际上,当
是
时,
与
会得到不同的结果!) 从技术上讲,这称为“字符串转换”;参见JLS 5.1.11。该转换等效于对primitive18ѭ的调用或对相关原始包装器类的静态
方法的调用。
厘恼轨
姬第柔炒
中实现
方法。如果您确实需要编译错误,则可以创建一个基本的抽象类,例如:
然后像这样创建您的类,它将产生一个编译错误,您必须实现
方法:
细屠截殴些
类具有一个
,它被Java中的每个类继承(因为非常类是从
派生的)。
将被调用(除非被覆盖,在这种情况下,特定对象的'4ѭ将被调用)。 您无法采取任何措施来防止这种情况的发生。 另一方面,您的方法是什么样的?如果您有
并致电
,我很确定这会导致编译时错误。 当然,如果您有一个重载的方法,其参数为32,则将调用该方法。在内部,此方法可能在
上调用
。另外,在字符串上下文中使用不是字符串的对象(例如,如果将其连接到字符串),将导致对该对象的
的隐式调用(可以是被覆盖的对象,也可以是默认值)从
起)。 要从
获得更漂亮的结果,您应该在
类中覆盖
,以便打印出更有意义的内容。
邦绊门蔽惩
从我的Java 1.6.0_23编译器产生以下输出:
伐教爸