我在 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) {
}
当您的方法具有许多 String 参数时,这是有意义的,例如你可以避免
public void Foo(String username, String password, String db, String table, String constraint)
而是使用像这样的强类型代码:
public void Foo(UserName username, Password password, DatabasePath db, TableName table...)
等等……