将未知的ArrayList类型传递给方法

Mor*_*Man 8 java arraylist

假设我有这两个ArrayLists:

ArrayList<Book> book = new ArrayList<>();
ArrayList<Journal> journal = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

Book并且Journal是两个不同的类.

两者BookJournal对象都有一个getYear()方法.我想创建一个传入未知ArrayList类型的方法,并将传入的年份与列表中的对象进行比较.以下代码为main:

public static void fooBar(int year, ArrayList<?> list)
{
    if(list.get(0).getYear() == year) // does not work!
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果将未知类型传递给方法,则无法使用该对象的方法(getYear()).如果不做两个做同样事情的方法(一个用于Book一个用于一个Journal),我怎么能这样做呢?

rge*_*man 13

您可以创建一个HasYear声明getYear()方法的接口(如果它尚不存在)(可能已命名),并拥有BookJournal实现它.

然后你可以让你的fooBar方法采用一个ArrayList类型参数a HasYear.

public static void fooBar(int year, ArrayList<? extends HasYear> list)
Run Code Online (Sandbox Code Playgroud)

? extends是因为它是消费者而不是生产者.

  • 使用`List <?>`参数,您可以传递任何列表,例如`List <Integer>`,`List <Foo>`,`List <?>`等,这些不一定有一个`getYear()`方法.编译器不允许您调用它不能保证存在的方法. (3认同)