Как я создаю уникальный идентификатор в Java? [дубликат]

Вместо того, чтобы делать это усложнило, сохраните это простым и используйте toggleShow на родительском компоненте и только смонтируйтесь Notification, если шоу верно, передача в toggleShow от родителя как опоры, чтобы смочь переключить это от нашего дочернего компонента

class Test extends React.Component {
  constructor() {
    super();
    this.state = { show: false };
    this.toggleShow = this.toggleShow.bind(this);
  }

  toggleShow() {
    this.setState(prevState => ({ show: !prevState.show }));
  }

  render() {
    return (
      <div className="App">
        <button onClick={this.toggleShow}>show the button</button>
        {this.state.show && <Notification hideNotification={this.toggleShow} />}
      </div>
    );
  }
}

const Notification = ({ hideNotification }) => (
  <div className="test">
    <div>
      <button onClick={hideNotification}>Card</button>
    </div>
  </div>
);
161
задан Supertux 7 September 2009 в 14:48
поделиться

4 ответа

Создайте UUID .

String uniqueID = UUID.randomUUID().toString();
333
ответ дан 23 November 2019 в 21:24
поделиться

Если вам нужны короткие, удобочитаемые идентификаторы и они должны быть уникальными только для каждого запуска JVM:

private static long idCounter = 0;

public static synchronized String createID()
{
    return String.valueOf(idCounter++);
}    

Изменить: Альтернатива, предложенная в комментариях - это зависит от -hood «магия» для обеспечения безопасности потоков, но более масштабируемая и такая же безопасная:

private static AtomicLong idCounter = new AtomicLong();

public static String createID()
{
    return String.valueOf(idCounter.getAndIncrement());
}
47
ответ дан 23 November 2019 в 21:24
поделиться

java.util.UUID : метод toString ()

22
ответ дан 23 November 2019 в 21:24
поделиться

Вот мои два цента: я ранее реализовал класс IdFactory , который создавал идентификаторы в формате [имя хоста] - [время запуска приложения] - [текущее время] - [дискриминатор] . Это в значительной степени гарантировало, что идентификаторы были уникальными для экземпляров JVM, при этом идентификаторы оставались читаемыми (хотя и довольно длинными). Вот код на случай, если он пригодится:

public class IdFactoryImpl implements IdFactory {
  private final String hostName;
  private final long creationTimeMillis;
  private long lastTimeMillis;
  private long discriminator;

  public IdFactoryImpl() throws UnknownHostException {
    this.hostName = InetAddress.getLocalHost().getHostAddress();
    this.creationTimeMillis = System.currentTimeMillis();
    this.lastTimeMillis = creationTimeMillis;
  }

  public synchronized Serializable createId() {
    String id;
    long now = System.currentTimeMillis();

    if (now == lastTimeMillis) {
      ++discriminator;
    } else {
      discriminator = 0;
    }

    // creationTimeMillis used to prevent multiple instances of the JVM
    // running on the same host returning clashing IDs.
    // The only way a clash could occur is if the applications started at
    // exactly the same time.
    id = String.format("%s-%d-%d-%d", hostName, creationTimeMillis, now, discriminator);
    lastTimeMillis = now;

    return id;
  }

  public static void main(String[] args) throws UnknownHostException {
    IdFactory fact = new IdFactoryImpl();

    for (int i=0; i<1000; ++i) {
      System.err.println(fact.createId());
    }
  }
}
19
ответ дан 23 November 2019 в 21:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: