我想要一种验证字段的方法
protected void validate(String field, String fieldName){
if (field==null || field.isEmpty){
throw new IllegalArgumentException("Parameter " + fieldName + " cannot be empty");
}
}
例如在我的类里面使用
class Foo {
private String x;
private String y;
...
public void validateAll(){
validate(x, "x");
validate(y, "y");
}
}
这样使用就太好了
public void validateAll(){
validate(x);
validate(y);
}
并让编译器自动将变量名称传递给 validate(field, fieldName) 方法
如何在 Java-8 中实现此目的?
最佳答案
您可以在 Java 中实现此目的,方法是放弃使用带有字段的 Java 类的想法,而使用将 Column
对象映射到值的 Map
。从使用的角度来看,它大致如下所示:
public static final Column<String> X_COLUMN = new Column<>( "x", String.class );
public static final Column<String> Y_COLUMN = new Column<>( "y", String.class );
public static final Table FOO_TABLE = new Table( "Foo", X_COLUMN, Y_COLUMN, ... );
...
Row fooRow = new Row( FOO_TABLE );
fooRow.setFieldValue( X_COLUMN, "x" );
String x = fooRow.getFieldValue( X_COLUMN );
for( Column<?> column : fooRow.getTable().getColumns() )
doSomethingWithField( fooRow, column );
private static <T> void doSomethingWithField( Row row, Column<T> column )
{
T value = row.getFieldValue( column );
...do something with the field value...
}
关于java - 在 Java-8 中自动将属性名称作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39707089/