Метод, который я использовал в C# (и просто портирован на Java - извинения, если я сделал ошибку, я новичок в Java) заключается в создании классов StringlyTyped, например.базовый класс
public abstract class StringlyTyped {
private String value;
public StringlyTyped (String value){
if (value == null){
throw new IllegalArgumentException("value must not be null");
}
this.value = value;
}
public String getValue() { return value; }
@Override
public boolean equals(Object other){
if (other == this) {
return true;
}
if (other == null || !this.getClass().equals(other.getClass())){
return false;
}
StringlyTyped o = (StringlyTyped)other;
return o.getValue().equals(this.getValue());
}
@Override
public int hashCode(){ return this.getValue().hashCode(); }
@Override
public String toString() { return this.getValue(); }
}
Тогда производный класс
public class ProviderName extends StringlyTyped {
public ProviderName(String value) {
super(value);
}
}
А использование
public void Foo(ProviderName provider) {
}
Это имеет смысл, если у вас есть методы со многими Струнные parametrers, например, вы можете избежать
public void Foo(String username, String password, String db, String table, String constraint)
и вместо того, чтобы иметь код, который сильно типизированных, как это:
public void Foo(UserName username, Password password, DatabasePath db, TableName table...)
и т.д ...
ни хранить пути к базам данных в переменных или создать класс для представления databasae с операции, определенные в методах, звучат хорошо. – NimChimpsky