### Question:
HeaderExchangeChannel implements ExchangeChannel { @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } HeaderExchangeChannel other = (HeaderExchangeChannel) obj; if (channel == null) { if (other.channel != null) { return false; } } else if (!channel.equals(other.channel)) { return false; } return true; } HeaderExchangeChannel(Channel channel); @Override void send(Object message); @Override void send(Object message, boolean sent); @Override ResponseFuture request(Object request); @Override ResponseFuture request(Object request, int timeout); @Override boolean isClosed(); @Override void close(); @Override void close(int timeout); @Override void startClose(); @Override InetSocketAddress getLocalAddress(); @Override InetSocketAddress getRemoteAddress(); @Override URL getUrl(); @Override boolean isConnected(); @Override ChannelHandler getChannelHandler(); @Override ExchangeHandler getExchangeHandler(); @Override Object getAttribute(String key); @Override void setAttribute(String key, Object value); @Override void removeAttribute(String key); @Override boolean hasAttribute(String key); @Override int hashCode(); @Override boolean equals(Object obj); @Override String toString();  }### Answer:
@Test public void equalsTest() { Assertions.assertThrows(IllegalArgumentException.class, () -> { Assertions.assertEquals(header, new HeaderExchangeChannel(channel)); header = new HeaderExchangeChannel(null); Assertions.assertNotEquals(header, new HeaderExchangeChannel(channel)); }); }