Идея состоит в том, чтобы реализовать класс ReentrantLock, который может использоваться с «попробовать с ресурсами», а это означает, что он должен реализовать интерфейс AutoCloseable.
Кроме того, я хотел спросить, почему в «основном» методе компилятор выдаёт, что мне нужно добавить "подвох" предложение, потому что мой метод закрытия (в MyReentrantLock) не генерирует исключение.
Код: Выделить всё
import java.util.concurrent.locks.ReentrantLock;
public class Ex09ReentrantLock {
@SuppressWarnings("serial")
public static class MyReentrantLock extends ReentrantLock implements AutoCloseable{
public MyReentrantLock() {
super();
lock();
}
@Override
public void close(){
unlock();
}
}
public static AutoCloseable lock() {
var locker = new MyReentrantLock(); //lock() is called in the constructor
return locker; //implements AutoCloseable
}
//Demo
public static void main(String[] args) {
//try(ReentrantLock lock = new ReentrantLock()){} = compiler error
try(var locker = lock();){
//some work...
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- Подходит ли эта реализация? (вызов блокировки в конструкторе...)
- Почему компилятор заставляет меня добавлять предложение catch(), если мое закрытие не выдает исключение?
Подробнее здесь: https://stackoverflow.com/questions/591 ... -resources
Мобильная версия