Java “与”之间的实际区别是什么;ArrayList<;A>&引用;及;ArrayList<;?扩展A>&引用;?
我看了一些问题,但它们并没有完全涵盖我的问题Java “与”之间的实际区别是什么;ArrayList<;A>&引用;及;ArrayList<;?扩展A>&引用;?,java,generics,Java,Generics,我看了一些问题,但它们并没有完全涵盖我的问题 请注意,ArrayList和ArrayListArrayList表示特定的a类,其中asArrayList使用private ArrayList作为变量声明实际上并不等同于使用通配符private ArrayList,这将解释差异: public class GenericsTest { private ArrayList<A> la; private ArrayList<? extends A> lexta;
请注意,
ArrayList和ArrayListArrayList
表示特定的a类,其中asArrayList使用private ArrayList
作为变量声明实际上并不等同于使用通配符private ArrayList,这将解释差异:
public class GenericsTest {
private ArrayList<A> la;
private ArrayList<? extends A> lexta;
void doListA(ArrayList<A> la) {}
void doListExtA(ArrayList<? extends A> lexta) {}
void tester() {
la = new ArrayList<SubA>(); // Compiler error: Type mismatch
doListA(new ArrayList<SubA>()); // Compiler error: Type mismatch
lexta = new ArrayList<SubA>();
doListExtA(new ArrayList<SubA>());
}
static class A {}
static class SubA extends A {}
}
公共类泛型测试{
私人ArrayList la;
private ArrayList让我们看看一些实际例子。比如说,你有:
List<Number> list;
这张表是这样写的:嘿,这是一个扩展了数字的列表,但是没有人知道确切的含义。这意味着什么?这意味着你可以将数组列表
分配给这个列表,这在第一种情况下是不可能的。你仍然知道这个列表输出的任何内容都将是一个数字
,但你不能它不再是一个整数
还有一种相反的情况:
List<? super Number> list;
List一开始很难理解,但继承不适用于泛型,即如果B扩展了A,List
不是List
的“子类”(不能指定给)。List此外,List主要区别在于,如果泛型形式用作基类(或接口)中方法的参数或返回类型,它允许更大范围的类型签名计数为重写而不是重载
例如,以下代码是合法的(在Java 7中):
接口A
{
列表据我所知,没有区别。那不是真的。你可以有一个列表
,其中添加整数
s。ArrayList是错误的,这也不是他的问题的答案。他问这些表达式与他提供的示例中的不同。这不是他的问题的答案。他问这些表达式在哪里与他提供的例子不同。好吧,那么这个问题(对我来说)有点不清楚.无论如何,似乎cibercitizen1正在假设ArrayList和ArrayList@Malcom:很好地解释了什么类型的东西可以添加到列表中,或者不添加到列表中。那么案例2:一个方法可以接受什么类型的列表呢?@cibercitizen1正如我在回答中所说,扩展数字的东西的列表。可能是这样的方法类似于列表
或列表
。因此,您知道此列表将为您提供一个编号
,但您不知道可以在其中输入什么。是的,它可以,这两种方法都必须处理异常。如果您有列表
,并不意味着您不能在其中输入B
。
List<Number> list;
List<? extends Number> list;
List<? super Number> list;
interface A
{
List<? extends Number> getSomeNumbers();
}
class B implements A
{
@Override
public ArrayList<Integer> getSomeNumbers()
{
return new ArrayList<>();
}
}