有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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);
    }

共 (4) 个答案

  1. # 1 楼答案

    因为原始代码显然是为了区分不同类型的数字。如果您只是返回“Number”,那么obj将被强制转换为一个数字(即使它实际上不是一个数字),这可能会导致ClassCastException。通过使用原始代码,用户可以在一定程度上安全地将obj转换为正确的类型

  2. # 2 楼答案

    出于以下几个原因,这毫无意义:

    1. 基元类型是不可变的,没有理由使用“新”构造函数
    2. 区分不同的类是没有意义的,因为函数最后会返回一个数字
    3. 即使有必要区分并创建一个新实例,编写一个泛型方法http://docs.oracle.com/javase/tutorial/java/generics/methods.html(除非代码是用不支持泛型的旧版本java编写的),然后复制这么多代码(尽管它会编译可能不需要的数字检查)

    我能想到的唯一可能的原因是,如果列表中没有包含所有类型的数字,程序员希望将支持的数字类型列为白名单,但即使如此,该方法的名称也不正确

  3. # 3 楼答案

    我想,作者试图做一个广义复制函数。 它的工作方式就像他试图创建一个新对象,如果这个对象是一个数字,在一个新实例中返回一个数字;e、 g:

    Byte(byte value) Constructs a newly allocated Byte object that represents the specified byte value.

    也许,如果这是有意义的,他可能有很多数据,在操作时不知道是不是一个数字。因此,他只想用数字操作,或者想在数字之后使用一个公共单元,如果不是数字,就避免例外。我不是说这是对这些情况的方法,但它可能是有意义的(作为解释而不是建议,听起来像是C++程序编写的代码)。顺便说一句,正如在其他答案中所注意到的,对象是不可变的,所以如果这是一个真实的例子,没有很好的理由

  4. # 4 楼答案

    我认为没有正当理由这样做。如果对象是可变的,并且您希望创建这些对象的副本,那么这可能是有意义的。但是原始包装器类是不可变的,因此使用现有对象调用构造函数是没有意义的