вопрос заключается в следующем, есть два класса, один "Пользователь", а второй "Сообщения", вопрос в том, как реализовать чтобы при добавлении пользователя за ним закреплялся постоянный id(минимум возможный id был бы 1) и при добавлении нового пользователя id увеличивался на 1! Немного трудности с этим, должен ли быть id записан в конструкторе класса "Пользователь" и как это реализовать чтобы он оставался постоянный за одним пользователем? П.С. класс "Сообщения" нужен для того, чтобы за определенным пользователем сохранялись сообщения.
Например, так :
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
class User {
private static long ID = 1;
private final long id;
private final List<Message> messages;
public User() {
this.id = ID++;
this.messages = new ArrayList<>();
}
public long getId() {
return id;
}
public List<Message> getMessages() {
return messages;
}
public User addMessage(String text) {
messages.add(new Message(text, this));
return this;
}
@Override
public String toString() {
return "User{" + "id=" + id + ", messages=" + messages + '}';
}
public static void main(String[] args) {
User user1 = new User()
.addMessage("Test1")
.addMessage("Test2");
User user2 = new User()
.addMessage("Test3");
System.out.println(user1);
System.out.println(user2);
}
}
class Message{
private static long ID = 1;
private final long id;
private final LocalDateTime dateTime;
private final String text;
private final User author;
public Message(String text, User user) {
this.id = ID++;
this.dateTime = LocalDateTime.now();
this.text = text;
this.author = user;
}
public long getId() {
return id;
}
public LocalDateTime getDateTime() {
return dateTime;
}
public String getText() {
return text;
}
public User getAuthor() {
return author;
}
@Override
public String toString() {
return "Message{" + "id=" + id + ", dateTime=" + dateTime + ", text=" + text + '}';
}
}
Я использовал следующий код для генерации уникального идентификатора (как строкового так и целого):
public final class UUID {
transient private static Random random=new Random(System.currentTimeMillis());
transient private static AtomicInteger stringCounter =new AtomicInteger(0);
transient private static AtomicLong idCounter=new AtomicLong(0);
public static synchronized String getStringId() {
StringBuffer sb=new StringBuffer();
sb.append(System.currentTimeMillis()).append('.').append(random.nextInt(Integer.MAX_VALUE)).append('.').append(stringCounter.addAndGet(1));
return sb.toString();
}
public static long getLongId() {
return idCounter.addAndGet(1);
}
}
Обращаю внимание на Thread safety - иногда это важно. В случае генерации целочисленного идентификатора используется Atomic
Вызывать можно откуда угодно. В вашем случае очевидно в конструкторе User/Message
Виртуальный выделенный сервер (VDS) становится отличным выбором
В список с клавиатуры пишу стринги, на экран нужно вывести индекс первой стринги которая меньше предыдущей, пример:
Всем приветПереписываю некоторые методы с android приложения для реализации их чисто на java
Есть какой-то сервер к примеру с 16 CPUЕсть JVM (OpenJDK 8u), запускаемая на нем