如果我有一个名为MyDate的自定义日期类型,我在其中编写了运算符,用于将double和MyDate隐式转换为彼此。
我的问题:是否有任何方法可以为特定方法参数切换此隐式转换?这是一个好主意吗?
e.g。
public class A {
...
public void AMethod(double x, double y) {
// do something
}
}
我不想在AMethod()的特定情况下让某人能够像这样调用它:
A a = new A();
a.AMethod(m, n); // m and n are of type MyDate
答案 0 :(得分:3)
我认为不可能只关闭所选方法的隐式转换,无论是全部还是全部都没有。
话虽如此,只有在进行转换时没有丢失任何内容时才应实现隐式转换,例如:你不应该关心转换是否发生。如果不是这种情况(或者至少在一个方向上不是这种情况),那么将隐式转换更改为显式,您的问题将消失。当然,对于所有这些转换,您的代码将更加明确,但这是正确的。
答案 1 :(得分:2)
这不是一个好主意。 在创建自定义隐式转换时,您应该以适用于所有可能方案的方式实现它。 在某些情况下关闭它的可能性会使代码更难以阅读并可能引入错误。
如果您想要打开和关闭转换,您应该只执行显式转换(然后可以在需要时应用)。