使用不同的类型,还是使用Object?

时间:2014-01-31 15:58:31

标签: java object

很抱歉这是一个虚假的问题,但是为什么我们甚至可以使用Stringint和其他人,如果我们可以只使用Object作为类型?

我的意思是使用Object one;代替String one;

4 个答案:

答案 0 :(得分:2)

例如,String类声明了一堆方法。如果您的变量声明为Object,则只有Object及其超类(无)中声明的方法在该变量上可见,而不管实际对象的类型如何。

你可以做到

String one = new String("whatever");
System.out.println(one.length());

但你做不到

Object one = new String("whatever");
System.out.println(one.length());

在变量的编译时类型上解析方法和字段。

答案 1 :(得分:1)

因为在某些情况下,如果您知道,您将拥有String,最好使用:

String str = "foo";
int length = str.length();

而不是像这样进行类型转换:

Object str = "foo";
try {
    int length = ((String)str).length();
} catch (ClassCastException e) {
    // and now what?
}

不知道str是否真的是String

班级Object仅提供Object方法。因此,您无法访问length()上的Object方法。

因此,每次您知道,您只能处理String使用 a String

如果您不确定自己将拥有什么,则必须使用Object并执行特殊逻辑(类型转换,ClassCastException上的错误处理等等。)。

答案 2 :(得分:0)

因为Object是最低的共同点。它也不是类型安全的,每次你想要对该类进行特定的操作时,你都必须转换为特定的类型。

答案 3 :(得分:0)

真的有几个原因..

  • charAt对象上尝试使用String,由Object类型引用引用。如果我们仅使用Object类型引用,那么我们只能使用Object方法,这些方法并不完全有用。

  • 某些方法需要 String类型,而不是Object类型。例如,string.substring()需要一个或两个arguments类型int。如果您传递Object,则无法编译,除非您进行投射。这意味着,每次你想要使用一些不接受类型Object的本机Java功能,并且需要更具体的引用类型时,你必须抛出它......这在大多数情况下都是如此。

  • 所以代码有点血腥感。使用这些类型意味着只需查看变量类型即可自动知道它将保留的数据类型。 String会保留一些文字。 int包含一个整数,double包含一个大小数。这有助于使代码更具可读性,因此更具可扩展性。