在许多oop语言中,如dart或java,可以参数化传递到对象构造函数中的参数。在构造函数中处理意外参数类型的最佳方法是什么?例如,在这个dart代码段中,plus运算符( +
)是使用的,假设只有在int或字符串的上下文中才有意义:
class Wrap <T> {
OK;
factory Wrap (T a) {
if (a is String) print ("Type is String");
else if (a is int) print ("Type is int");
return Wrap ._ (a);
}
Wrap ._ (this.a);
}
main () {
/ *
var obj = Wrap <Map <int, String >> (<int, String> {0: '1'});
var obj = Wrap <String> ('2');
var obj = Wrap <int> (2);
* /
print (obj.a + obj.a);
}
我对处理这个问题的oop方法很感兴趣(如果可能的话,特别是在dart和java中)。
我考虑过的一些想法是:
在构造函数中返回null。但是,看起来有些语言,比如java,[不允许这样][1]
有一些方便的方法来优雅地创建对象,即使类型是意外的
1条答案
按热度按时间von4xj4u1#
正如@charlie armstrong所评论的,当前处理泛型类的type参数中的意外类型的最好和最安全的方法是抛出异常。
尽管这并不能阻止示例的创建,但是异常已经足够了,因为它通知程序员出了问题,只给他一个选项来处理错误/异常,否则程序将终止。
下面是上述内容的一个例子:
感谢@anilredshift编辑并重新打开问题。