java中用于保存任何对象的通用列表

时间:2014-04-23 12:18:58

标签: java list generics

我是Java新手。 我想创建一个数组List,它将能够容纳任何对象。 我想知道如何实现这一目标。我正在尝试使用Class,但我不确定如何从中获取对象。这就是我要做的事情

<T> List<T> ConvertToList(<Map <String, List<Long>>map, Class<T> clazz)
{
//I want to extract all values from the map and store into an object as refered
//by clazz and put that into list.

...
...
List<T> list = new ArrayList<T>();
}

是否有可能,如果是的话怎么做?

2 个答案:

答案 0 :(得分:0)

我相信你的问题的答案是肯定的。为此,请使用以下代码

ArrayList<Object> arrayList = new ArrayList<>();

您现在可以添加将Object扩展到数组列表的类,我相信所有类都会隐式执行此操作。

答案 1 :(得分:0)

List实现可以保留任何类型的Object。这是因为它使用了泛型。请记住,ArrayList只是array元素的包装。只需出现即可通过在幕后重新声明来操纵该数组的大小。复制此功能非常简单,如下所示:

public class MyList<T> {
    T[] elements;
}

这可以通过多种方式初始化:

MyList<String> list = new MyList<String>();

MyList<MyList<Integer>> intList = new MyList<MyList<Integer>>();

因此,根据定义,您可以将其公开为原始类型:

MyList myObjectList = new MyList();

但是你的IDE会抱怨,这是件好事。您应该避免处理类型Object,并尝试使其更具体,以避免在整个地方投射。

示例 - 编写方法签名以将Map实现转换为List实现。

这个更有趣,但遵循相同的原则。我们假设您要从values中的所有Map创建一个列表。

public List<T> <K,T> mapToList(Map<K, T> map) {
    List<T> list = new ArrayList<T>();

    list.addAll(map.values());

    return list;
}

注意:这包含在内,这样您就可以更好地了解泛型如何工作,以及Java如何处理变量方法参数。