TypeAlias<T>
This commit is contained in:
parent
a14d87fd18
commit
991dfda653
2 changed files with 156 additions and 0 deletions
75
src/main/java/net/kemitix/mon/TypeAlias.java
Normal file
75
src/main/java/net/kemitix/mon/TypeAlias.java
Normal file
|
@ -0,0 +1,75 @@
|
|||
/**
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2017 Paul Campbell
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software
|
||||
* and associated documentation files (the "Software"), to deal in the Software without restriction,
|
||||
* including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
* subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all copies
|
||||
* or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
|
||||
* AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package net.kemitix.mon;
|
||||
|
||||
/**
|
||||
* Type Alias for other types.
|
||||
*
|
||||
* @param <T> the type of the alias
|
||||
*
|
||||
* @author Paul Campbell (pcampbell@kemitix.net)
|
||||
*/
|
||||
@SuppressWarnings("abstractclassname")
|
||||
public abstract class TypeAlias<T> {
|
||||
|
||||
/**
|
||||
* The value.
|
||||
*/
|
||||
private final T value;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param value the value
|
||||
*/
|
||||
protected TypeAlias(final T value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public final int hashCode() {
|
||||
return value.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean equals(final Object o) {
|
||||
if (o instanceof TypeAlias) {
|
||||
return value.equals(((TypeAlias) o).value);
|
||||
}
|
||||
return value.equals(o);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final String toString() {
|
||||
return value.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the value of the type alias.
|
||||
*
|
||||
* @return the value
|
||||
*/
|
||||
public final T getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
}
|
81
src/test/java/net/kemitix/mon/TypeAliasTest.java
Normal file
81
src/test/java/net/kemitix/mon/TypeAliasTest.java
Normal file
|
@ -0,0 +1,81 @@
|
|||
package net.kemitix.mon;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class TypeAliasTest {
|
||||
|
||||
@Test
|
||||
public void shouldCreateATypeAliasAndGetTheValue() throws Exception {
|
||||
//given
|
||||
final String value = "value";
|
||||
//when
|
||||
final TypeAlias<String> typeAlias = new TypeAlias<String>(value) {
|
||||
};
|
||||
//then
|
||||
assertThat(typeAlias.getValue()).isEqualTo(value);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateAnAliasedTypeAndGetTheValue() throws Exception {
|
||||
//given
|
||||
final String value = "value";
|
||||
//when
|
||||
final AnAlias anAlias = AnAlias.of(value);
|
||||
//then
|
||||
assertThat(anAlias.getValue()).isEqualTo(value);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldBeEqualWhenValuesAreTheSame() throws Exception {
|
||||
//given
|
||||
final String value = "value";
|
||||
final AnAlias anAlias1 = AnAlias.of(value);
|
||||
final AnAlias anAlias2 = AnAlias.of(value);
|
||||
//then
|
||||
assertThat(anAlias1).isEqualTo(anAlias2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldBeEqualToUnAliasedValue() throws Exception {
|
||||
//given
|
||||
final String value = "value";
|
||||
final AnAlias anAlias = AnAlias.of(value);
|
||||
//then
|
||||
assertThat(anAlias).isEqualTo(value);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldHaveHashCodeOfValue() throws Exception {
|
||||
//given
|
||||
final String value = "value";
|
||||
final AnAlias anAlias = AnAlias.of(value);
|
||||
//then
|
||||
assertThat(anAlias.hashCode()).isEqualTo(value.hashCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldHaveSameToStringAsAliasedType() throws Exception {
|
||||
//given
|
||||
final String value = "value";
|
||||
final AnAlias anAlias = AnAlias.of(value);
|
||||
assertThat(anAlias.toString()).isEqualTo(value.toString());
|
||||
}
|
||||
|
||||
private static class AnAlias extends TypeAlias<String> {
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param value the value
|
||||
*/
|
||||
protected AnAlias(final String value) {
|
||||
super(value);
|
||||
}
|
||||
|
||||
static AnAlias of(final String value) {
|
||||
return new AnAlias(value);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue