B b和A b b之间的差异</b>

时间:2010-06-09 23:44:37

标签: java types

假设B类扩展了A类,我想为B声明一个变量。什么更有效,为什么?

  1. B b OR
  2. A<B> b

6 个答案:

答案 0 :(得分:4)

你混淆了两个不同的概念。

class B extends A {

}

表示B A

如果您有A<B>之类的内容,则表示您将课程A定义为

class A<T> {

}

意味着您的类A是一个泛型类。

例如(简化)你有

class List<T> {

}

因此,如果T获取值String,则List<String>表示字符串列表

所以A<B>并不代表B extends A

您应该使用B b

答案 1 :(得分:1)

使用B bA<B>是一个使用B作为类型的模板类,例如:

  • List<String>是一个字符串列表,因此List<B>将是B个对象的列表。

  • WeakReference<String>是对字符串的弱引用,因此WeakReference<B>将是对B对象的弱引用。

答案 2 :(得分:1)

如果B延伸A,那么我会尽可能使用A型。

widget = new B();

这降低了代码的其他部分可能对您的实现产生的假设。

答案 3 :(得分:0)

两种声明都不比另一种更有效。

A<B> b未声明B类型的引用,它声明类型为A的{​​{1}}类型的引用。

除非A是通用类,否则第二种形式是非法的。

答案 4 :(得分:0)

我认为这不是效率问题,而是使用问题。如果纯A对象不打算使用B,那么为什么你希望它是A<B> b

答案 5 :(得分:0)

你的声明不会远程做同样的事情。第一个声明了B类型的对象,而第二个声明了A<T>类型的对象,其中 T 是一个类型参数,其插槽由类型{{1 }}