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 Enlightened
tvd12 Enlightened
The Best Answer
  1. EzyWrap cũng giống <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html" rel="nofollow ugc">AtomicReference</a> nó chuyên dùng để wrap lại giá trị thực tế ở bên trong.
  2. Khi nào dùng nó?
Ví dụ trong trường hợp này:
String roomGroupThreadName;
doAnswer(invocation -&gt; {
  roomGroupThreadName = Thread.currentThread().getName();
  return null;
})
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