Java – Mixed ArrayLists?

Est-il possible de stocker un mélange de types d’objects dans une ArrayList? Si c’est le cas, comment?

C’est ce que j’ai essayé jusqu’à présent:

List list = new ArrayList(); list.add(new Ssortingng("Hello World")); list.add(new Integer(1)); list.add(new Long(1l)); for (i = 0; i < list.size(); i++) { if (list.get(i) instanceof String){ sqlPreparedStatement.setString((i+1), (String) list.get(i)); } else if (list.get(i) instanceof Integer) { sqlPreparedStatement.setInt((i+1), (Integer) list.get(i)); } else if (list.get(i) instanceof Long) { sqlPreparedStatement.setLong((i+1), (Long) list.get(i)); } } 

Mais il jette une exception de casting.

Merci d’avance pour toute consortingbution!

Voici ce que vous devriez avoir:

 List list = new ArrayList(); list.add(new Ssortingng("Hello World")); list.add(new Integer(1)); list.add(new Long(1l)); for (Object obj: list) { if (obj instanceof Ssortingng){ sqlPreparedStatement.setSsortingng((Ssortingng) obj); } else if (obj instanceof Integer) { sqlPreparedStatement.setInt((Integer) obj); } else if (obj instanceof Long) { sqlPreparedStatement.setLong((Long) obj); } } 

Désolé de bloquer votre défilé, mais vous ne devriez pas utiliser un ArrayList de 3 (ou aucun) de types différents pour commencer. Si les informations sont liées, créez une classe qui contient les informations liées et créez une ArrayList qui ne contient qu’un seul type: les objects de cette classe.

Modifier 1:
Par exemple, disons à une classe de contenir les données comme suit:

 class SqlData { private Ssortingng textData; private int intData; private long longData; public SqlData(Ssortingng textData, int intData, long longData) { this.textData = textData; this.intData = intData; this.longData = longData; } public Ssortingng getTextData() { return textData; } public int getIntData() { return intData; } public long getLongData() { return longData; } } 

et utilisé comme tel:

  List sqlDataList = new ArrayList(); sqlDataList.add(new SqlData("Hello World", 1, 11L)); for (int i = 0; i < sqlDataList.size(); i++) { try { sqlPreparedStatement.setString(i + 1, sqlDataList.get(i).getTextData()); sqlPreparedStatement.setInt(i + 1, sqlDataList.get(i).getIntData()); sqlPreparedStatement.setLong(i + 1, sqlDataList.get(i).getLongData()); } catch (SQLException e) { e.printStackTrace(); } } 

Pourquoi faites-vous cela si difficile? PreparedStatement a une méthode setObject() – utilisez simplement ceci:

  List list = new ArrayList(); list.add(new Ssortingng("Hello World")); list.add(new Integer(1)); list.add(new Long(1l)); for (int i = 0; i < list.size(); i++) sqlPreparedStatement.setObject(i + 1, list.get(i)); // NOTE: columns count from 1 

REMARQUE: L'API Java SQL compte tous les éléments à partir de 1 et non de zéro. Les colonnes sont donc numérotées 1 ... size () et non 0 ... size () - 1.