Что же такого понаписать в catch (IOException){...}для try {socket.close()}, чтобы гарантировать закрытие здесь и сейчас.
Также, в спецификации написано про закрытие сокета (ServerSocket) через PrintWrite.close() или BufferedReader.close(), если мы их инициализировали потоками ServerSocket, но они также выбрасывают IOException. Как же быть?
second и third не успевают встать в ожидание condition.var c = new SomeClass();
try (var t = Executors.newFixedThreadPool(3)) {
t.submit(c::second);
t.submit(c::third);
Thread.sleep(100);
t.submit(c::first);
}
FileChannel channel = FileChannel.open(Path.of("test.txtx"),StandardOpenOption.CREATE,
StandardOpenOption.WRITE, StandardOpenOption.READ);
ByteBuffer buffer = ByteBuffer.allocate(15);
buffer.put("hello world".getBytes()); // записали в буфер данные
buffer.flip(); // <--- переключили буфер из режима записи в режим чтения
channel.write(buffer, 0); // теперь channel.write сможет прочитать записанные в
// буфере данные и записать их в файл
ByteBuffer buffer2 = ByteBuffer.allocate(15);
channel.read(buffer2, 0); // channel.read прочитал данные из файла и записал их в буфер
buffer2.flip(); // <--- переключаем из записи в чтение
System.out.println(StandardCharsets.UTF_8.decode(buffer2)); // decode читает данные из буфера
// и составляет из них строку
// Здесь ничего не выводилось, потому что без flip ничего и не записалось в файл.
System.out.println(new String(buffer2.array())); // ничего не выведет
неужели есть только один вариант это обрабатывать с поощью try/catch внутри каждого блока что бы избежать Unhandled exceptions?
private @NotNull Mono<JsonObject> invoke(Channel channel, Class<?> clazz, Method method, Object... args) {
return Mono.fromCallable(() -> clazz.getDeclaredConstructor(Server.class, Channel.class))
.map(constructor -> ex(() -> constructor.newInstance(this.manager.getServer(), channel)))
.flatMap(obj -> new GenericData<JsonObject>().invoke(method, obj, args))
.onErrorResume(Mono::error);
}
private <T> T ex(Callable<T> code) {
try {
return code.call();
} catch (Exception e) {
throw new RuntimeException(e);
}
}private @NotNull Mono<JsonObject> invoke(Channel channel, Class<?> clazz, Method method, Object... args) {
return Mono.fromCallable(() -> {
var constructor = clazz.getDeclaredConstructor(Server.class, Channel.class);
return constructor.newInstance(this.manager.getServer(), channel);
})
.flatMap(obj -> new GenericData<JsonObject>().invoke(method, obj, args))
.onErrorResume(Mono::error);
}
mvn -am -pl модуль package
Node<T> oldTop = top;
top = new Node<T>(item, oldTop);
class Initable2 {
static int staticNonFinal;
public static void main(String[] args) {
System.out.println(staticNonFinal);
}
}class Initable2 {
static int staticNonFinal;
// Вот этот блок будет добавлен к
// вашему классу во время компиляции.
static {
staticNonFinal = 0;
}
public static void main(String[] args) {
System.out.println(staticNonFinal);
}
}class Initable2 {
static int staticNonFinal = 42;
static String a = "hello";
static Cache<String, Integer> b = CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build();
}class Initable2 {
static int staticNonFinal;
static String a;
static Cache<String, Integer> b;
static {
staticNonFinal = 42;
a = "hello";
b = CacheBuilder.newBuilder()
.maximumSize(100)
.expireAfterWrite(10, TimeUnit.MINUTES)
.build();
}
}class Initable2 {
static int staticNonFinal = 42;
static Map<Integer, String> statusCodes = new HashMap<>();
static {
statusCodes.put(200, "OK");
statusCodes.put(404, "Not Found");
statusCodes.put(418, "I'm a teapot");
}
}class Initable2 {
static int staticNonFinal;
static Map<Integer, String> statusCodes;
static {
staticNonFinal = 42;
statusCodes = new HashMap<>()
statusCodes.put(200, "OK");
statusCodes.put(404, "Not Found");
statusCodes.put(418, "I'm a teapot");
}
}
А если в блоке try либо catch выполнить System.exit() ?
В каких случаях следует идти через Collection, а в каких через Iterator? (особенно если надо просто пробежаться всем элементам).
Решение с Iterator выглядит привлекательно при написании класса, в котором реализация интерфейса Collection затруднена или непрактична.
<repository>
<id>upstream</id>
<url>https://ci.nametagedit.com/plugin/repository/everything/com/nametagedit/nametagedit/</url>
</repository><repository>
<id>upstream</id>
<url>https://ci.nametagedit.com/plugin/repository/everything/</url>
</repository>
Просто я думал, зачем же нужен в enum valueOf(). Разобрался. Предположил, что метод хранит в себе строковое представление констант, а затем сравнивает вводные данные с ними.
public enum Hello {
FIZZ, BUZZ;
// Данный метод автоматически генерируется компилятором.
// Для любого enum'а.
public static Hello valueOf(String name) {
return Enum.valueOf(Hello.class, name);
}
}Но так как я знаю, что константы в enum это анонимные классы
Получается мне действительно прийдется перекрывать эти переменные повторным объявлением для разрыва связи с предком?
try (ResultSet rs = statement.executeQuery(query)) {
while (rs.next()) {
System.out.println("User: " + rs.getString("login"));
}
rs.beforeFirst(); // <-- перематываем
while (rs.next()) {
System.out.println("Hello, " + rs.getString("login"));
}
}class User {
private final String login;
private final String name;
private final String email;
public User(ResultSet rs) throws SQLException {
login = rs.getString("login");
name = rs.getString("name");
email = rs.getString("email");
}
public String getLogin() {
return login;
}
public String getName() {
return name;
}
public String getEmail() {
return email;
}
}List<User> users = new ArrayList<>();
try (ResultSet rs = statement.executeQuery(query)) {
while (rs.next()) {
users.add(new User(rs));
}
}
for (User u : users) {
System.out.println("Hello, " + u.getLogin());
}
exec.shutdown();
exec.awaitTermination(100, TimeUnit.SECONDS);