【问题标题】:Passing in type of elements in collection to a function which initialises an ArrayList (Java)?将集合中的元素类型传递给初始化 ArrayList(Java)的函数?
【发布时间】:2020-07-17 20:43:58
【问题描述】:

我想要一个函数,它接受一个参数,然后在 ArrayList 中设置 E,其中 E 是此集合中元素的类型。所以显示我想要做的最简单的代码就是这样,其中 E 是我不知道的。

private void createArray(E dataType) {
    ArrayList<dataType> list = (ArrayList<dataType>) message.getArray();
}

这有可能吗?我试图通过查看 ArrayList 类来找到答案,但我对 Java 没有太多经验。

编辑: 我不确定我的问题是否足够清楚......我不需要传递变量 dataType。当我执行初始化 ArrayList 的行时,我需要变量 dataType 成为 中的内容。我找到了以下答案:Pass class type as parameter to use in ArrayList? 但这对我来说并不适用。我需要使用数组列表中的元素并调用仅适用于该类的方法...

    private <T> void createModel(String SQLcomm, Class<T> dataType, DefaultTableModel table) {
    Parcel parc = SQLtask(SQLcomm, "array");
    ArrayList<T> list = (ArrayList<T>) parc.getData();

    for (T t: list) {
        Vector<Object> newRow = t.getinfo();    //can't do t.getinfo()?
        table.addRow(newRow);
    }

【问题讨论】:

  • 什么是“消息”,“getArray”返回什么?
  • 您能否发布完整的独立程序示例来说明您正在尝试做什么? “当我执行初始化 ArrayList 的行时,我需要变量 dataType 成为 的内容” - 您没有初始化 ArrayList? “Vector newRow”或“t.getInfo()”是否与问题相关?
  • 您是否希望能够访问泛型类型参数 T 的 getinfo 方法?这是行不通的,因为 T 可以是任何东西,例如 String 或 Integer,任何没有你的 getinfo 方法的类。你在哪里定义了 getinfo?

标签: java arraylist


【解决方案1】:

数组不是 ArrayList。但是您可以使用该方法:

如果你有一个数组,你可以使用:

Arrays.asList(array);

否则

List<E> list = new ArrayList<>();
list.add(element);

我希望这能回答你的问题。

【讨论】:

    【解决方案2】:

    当然这是“可能的”——你可以写:

    private <E> void createArray(E dataType) {
        ArrayList<E> list = (ArrayList<E>) message.getArray();
    }
    

    【讨论】:

    • 如果 message.getArray 返回一个数组(方法名称如何表示),则无法强制转换为 ArrayList。
    【解决方案3】:

    你可以,但你必须将数据类型作为类参数传递,这在 java 中称为泛型(有关泛型的更多信息,这是官方 java 文档的link) 示例:

    // E your data type
    public class A<E> {
        //Maybe you get data from database (ResultSet)
        public void createArray(ResultSet message, String index) throws SQLException {
            ArrayList<E> list = (ArrayList<E>) message.getArray(index);
            //the rest of the code...
        }
    }
    

    有关处理数组的更多信息here 是官方文档。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多