я следующий код:Назначение нуль для ArrayList элементов в Java
static ArrayList<PreparedStatement> alPrepStmts = new ArrayList<PreparedStatement>();
static PreparedStatement m_stmtOne;
static PreparedStatement m_stmtTwo;
static PreparedStatement m_stmtThree;
...
static PreparedStatement m_stmtOneHundred;
private static void init() {
alPrepStmts.add(m_stmtOne);
alPrepStmts.add(m_stmtTwo);
alPrepStmts.add(m_stmtThree);
...
alPrepStmts.add(m_stmtOneHundred);
}
private static void work() {
if(m_stmtOne == null) {
// assign m_stmtOne
}
// use m_stmtOne
}
private static void close() throws SQLException {
for(PreparedStatement ps : alPrepStmts) {
if(ps != null) {
ps.close();
ps = null;
}
}
}
Init() вызывается один раз. work() и close() могут вызываться несколько раз. Проблема в том, что после вызова метода close() PreparedStatements не имеют значение null. В следующий раз, когда я вызову work(), m_stmtOne не будет null, но будет закрыт. Я предположил, что могу проверить, открыт ли m_stmtOne, но мне интересно, как я могу присвоить null членам контейнера.
Я также пробовал использовать итераторы, и он тоже не работает. Условие if, приведенное ниже, никогда не будет истинным.
private static void ClosePreparedStatements() throws SQLException {
for(Iterator<PreparedStatement> it = alPrepStmts.iterator(); it.hasNext();) {
PreparedStatement ps = (PreparedStatement)it.next();
if(ps != null) {
ps.close();
ps = null;
}
}
}
Я знаю, что могу закрыть и назначить каждый оператор вручную, но я просто интересно, что это лучший способ, чтобы присвоить нуль для элементов в контейнере.
Код, указанный в вопросе, не может вести себя так, как вы описали. Для начала метод 'init()', как указано, просто заполняет 'alPrepStatements' 100 записями« null ». –
Да, мне пришлось вернуться и прочитать на разных ссылках. Мне нужно, чтобы PreparedStatements были переменными-членами, чтобы проверить, являются ли они нулевыми до их подготовки; Я считаю, что готовить их каждый раз не так эффективно? Я помещал их в список, потому что мне хотелось пройти через список, чтобы закрыть их, вместо того, чтобы вручную закодировать каждый из них и переназначить значение null. Я решил, что самое простое решение - просто скопировать все закрытие и переназначение вручную. – foamboarder