假设B类扩展了A类,我想为B声明一个变量。什么更有效,为什么?
B b
OR A<B> b
。答案 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 b
。 A<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 }}