I have a method that uses a SwingWorker. Part of the code is shown below:
public class mySocket {
public void writePacket(final String packet) {
// schedules execution on the single thread of the executor (so only one
// background operation can happen at once)
//
executor.execute(new SwingWorker<String, Void>() {
@Override
protected String doInBackground() throws Exception {
// called on a background thread
System.out.println("writing out this packet->" + packet + "
<-");
out.println(packet);
String thePacket = readPacket();
return thePacket;
}
..................
Мои вопросы касаются подписи метода writePacket. Переменная packet должна быть объявлена как final, иначе компилятор выдаст ошибку, поскольку SwingWorker является внутренним классом. Это поднимает следующие вопросы о том, как и когда я могу присвоить значения этой переменной:
- Final для меня означает, что переменной можно присвоить значение только один раз. Но поскольку объявление является частью сигнатуры метода, я не знаю, что это означает в данном контексте.
- Я всегда предполагал, что переменным final были присвоены значения при создании экземпляра класса, но здесь они присваиваются при вызове метода. Должна ли переменная, переданная методу, также быть объявлена окончательной и назначена в конструкторе класса, чтобы это работало?
- Могу ли я вызвать метод более одного раза с разными значениями для пакета или из-за того, что переменная объявлена final, означает ли это, что если я хочу вызвать метод с разными значениями, мне нужно повторно создавать класс для каждого нового значения переменной < B> пакет?
Заранее спасибо за помощь.
Эллиотт