java为什么会有人这么做?
为什么会有人这么做
private Number genericObjectToNumber (Object obj)
{
if (obj instanceof Byte)
{
return(new Byte((Byte) obj));
}
else if (obj instanceof Short)
{
return(new Short ((Short) obj));
}
else if(obj instanceof BigInteger)
{
return(BigInteger.ZERO.add ((BigInteger) obj));
}
return(null); // if it isn't a number, we don't want it
}
为什么不仅要归还演员?为什么要检查一个新对象的构造函数?为什么不问问obj instanceof
if (obj instanceof Number)
{
return((Number)obj);
}
# 1 楼答案
因为原始代码显然是为了区分不同类型的数字。如果您只是返回“Number”,那么obj将被强制转换为一个数字(即使它实际上不是一个数字),这可能会导致ClassCastException。通过使用原始代码,用户可以在一定程度上安全地将obj转换为正确的类型
# 2 楼答案
出于以下几个原因,这毫无意义:
我能想到的唯一可能的原因是,如果列表中没有包含所有类型的数字,程序员希望将支持的数字类型列为白名单,但即使如此,该方法的名称也不正确
# 3 楼答案
我想,作者试图做一个广义复制函数。 它的工作方式就像他试图创建一个新对象,如果这个对象是一个数字,在一个新实例中返回一个数字;e、 g:
也许,如果这是有意义的,他可能有很多数据,在操作时不知道是不是一个数字。因此,他只想用数字操作,或者想在数字之后使用一个公共单元,如果不是数字,就避免例外。我不是说这是对这些情况的方法,但它可能是有意义的(作为解释而不是建议,听起来像是C++程序编写的代码)。顺便说一句,正如在其他答案中所注意到的,对象是不可变的,所以如果这是一个真实的例子,没有很好的理由
# 4 楼答案
我认为没有正当理由这样做。如果对象是可变的,并且您希望创建这些对象的副本,那么这可能是有意义的。但是原始包装器类是不可变的,因此使用现有对象调用构造函数是没有意义的