Какое использование назначения временных переменных в следующем коде? Какая разница, если я использую mmServerSocket напрямую. Почему я инициализирую mmServerSocket как final?BluetoothServerSocket - Зачем использовать временную переменную?
private class AcceptThread extends Thread {
private final BluetoothServerSocket mmServerSocket;
public AcceptThread() {
// Use a temporary object that is later assigned to mmServerSocket,
// because mmServerSocket is final
BluetoothServerSocket tmp = null;
try {
// MY_UUID is the app's UUID string, also used by the client code
tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
} catch (IOException e) { }
mmServerSocket = tmp;
}
Но, возможно, остальная часть кода будет отлично работать с значением «null» для 'mmServerSocket' при вызове' IOException'. –
@TedHopp Или, возможно, нет. Если выбрано исключение, 'AcceptThread' даже не создается, поэтому остальная часть кода не должна быть специально закодирована и подвержена« возможно »спекуляциям. – EJP
Могу сказать, что «AcceptThread» может по-прежнему быть полезным (возможно, используя функции возврата, не связанные с BlueTooth), даже если выбрано исключение. Мы просто не знаем. Если вы настаиваете на необходимости переопределения API для распространения исключения, вы исключаете возможность создания «AcceptThread», когда есть исключение. –