方法能否返回不同的数据类型?

rma*_*aik 2 java list arraylist

我有一个名为的班级matFactory().在其中,有一个名为的方法lastAddedObj(..).

后一种方法接收ArrayList一个参数作为参数,并返回此列表中最后添加的对象.

我的问题是:我有两个类型的列表,ArrayList<Mat>ArrayList<MatOfKeyPoint>我想的方法lastAddedObject是适用于这两种类型.正如您在下面看到的方法签名:

public Mat lastAddedObj(ArrayList<Mat> list) {
....
....
    return list.get(size -1);
}
Run Code Online (Sandbox Code Playgroud)

我希望这种方法能够两个ArrayList<Mat>ArrayList<MatOfKeyPoint>,因为当你看到上面的,如果我通过ArrayList<Mat>它将返回Mat对象,如果将通过ArrayList<MatOfKeyPoint>将返回MatOfKeyPoint对象.

如何解决这个问题?

Sil*_*cea 9

我相信你在寻找这个:

public <T> T lastAddedObj(ArrayList<T> list) {
  return list.get(size - 1);
}
Run Code Online (Sandbox Code Playgroud)

说明:

当您使用a调用此方法时ArrayList<Mat>,将Mat推断出类型,并将T(泛型类型)替换为Mat.对我的回答的一些评论建议你也应该将方法标记为static,但这不是必需的.

这是一个关于泛型的教程:https://docs.oracle.com/javase/tutorial/extra/generics/methods.html

  • @rmaik:<T>用于使方法成为通用的(即T不是实际类型,它是模板类型).T是实际的返回类型.因为T将替换为实数类型,所以您将根据从ArrayList推断的类型获得正确的返回类型. (3认同)