Avatar
1
Vu Luong Anh Pundit
EzyWrap khác gì String thường?
https://github.com/youngmonkeys/game-box/blob/master/src/test/java/com/tvd12/gamebox/testing/MMORoomGroupTest.java#L103

Trong MMORoomGroupTest em thấy a có dùng EzyWrap. Sao phải dùng nó và khi nào nên dùng nó ạ?

  • Answer
game-box
Remain: 5
1 Answer
Avatar
tvd12 Pundit
tvd12 Pundit
The Best Answer
  1. EzyWrap cũng giống AtomicReference nó chuyên dùng để wrap lại giá trị thực tế ở bên trong.

  1. Khi nào dùng nó?

Ví dụ trong trường hợp này:

String roomGroupThreadName;
doAnswer(invocation -> {
  roomGroupThreadName = Thread.currentThread().getName();
  return null;
})

Nó sẽ báo lỗi Local variable roomGroupThreadName defined in an enclosing scope must be final or effectively final, vì bản chất cái code này nó tương đương với:

doAnswer(new Answer() {
  final String roomGroupThreadNameFinal = roomGroupThreadName;
  @Override
  public Object answer(InvocationOnMock invocation) throws Throwable {
    roomGroupThreadNameFinal = Thread.currentThread().getName();
    return null;
  }
})

Mà biến final thì không thể gán được. Tuy không thể gán được nhưng vẫn có thể gọi hàm được nên mình sẽ sử dụng EzyWrap em ạ

Một trường hợp nữa em có thể sử dụng đó là lấy output của hàm, trong trường hợp em không muốn sử dụng return.

public void doSomething(AtomicReference output) {
    output.set("Hello World");
}
  • 2
  • Reply