java - 关于泛型方法的问题

标签 java generics

我正在尝试将以下方法变成通用方法,结果被击中了。

public static MyObject[] getObjectFromList(List<MyObject> inputList) {
        if (inputList != null && inputList.size() > 0) {
            return inputList.toArray(new MyObject[inputList.size()]);
        } else {
            inputList = new ArrayList<MyObject>();
            MyObject obj = new MyObject();
            inputList.add(obj);
            return inputList.toArray(new MyObject[inputList.size()]);
        }
    }

还有另一个类似的方法,但它是 MyObject2

public static MyObject2[] getObjectFromList(List<MyObject2> inputList) {
            if (inputList != null && inputList.size() > 0) {
                return inputList.toArray(new MyObject2[inputList.size()]);
            } else {
                inputList = new ArrayList<MyObject2>();
                MyObject2 obj = new MyObject2();
                inputList.add(obj);
                return inputList.toArray(new MyObject2[inputList.size()]);
            }
        }

我如何将它作为一个单一的方法来获取任何对象(myobject,myobject2)列表和 返回一个数组?

最佳答案

由于类型删除,您不能在不更改方法签名的情况下执行此操作。如果您可以传递一个标识所需类型的 Class 对象,您可以执行如下操作:

public static <T> T[] getObjectFromList(List<? extends T> inputList, Class<T> c) {
    if (inputList == null || inputList.isEmpty()) {
        inputList = new ArrayList<T>();
        T obj = null;
        try {
            obj = c.newInstance();
        } (Exception ex) {
            throw new RuntimeException("Instantiation failed", ex);
        }
        inputList.add(obj);
    }             
    return inputList.toArray(Array.newInstance(c, inputList.size()));            
}

关于java - 关于泛型方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5178469/

相关文章:

java - 选择某些元素后使 Swing JMenuBar 树保持打开状态

c# - 通用方法 - 无法将类型 'string' 隐式转换为 T

java - 是否可以为 UTF-8 文件创建 InputStream?

java - Netbeans IDE 外的堆空间问题

java - 使用 OpenAL(java 和 lwjgl)缓冲 Wav 文件

java - 如何在 java 中创建固定大小的通用缓冲区?

java - Arraylist 的 Arraylist 的通用类型

java - 为什么 Java 8 有 Arrays.parallelSort() 但没有 Collections.parallelSort()?

c# - 为额外信息创建通用类成员

Linq 与自定义通用扩展方法结合构建错误 - 表达式树可能不包含赋值运算符?