我有以下抽象类
public abstract class IStreamSorterTest<T> {
protected static String FOLDER_NAME = null;
protected static String FILE_EXT = null;
protected static String SCHEMA_FILE_EXT = null;
protected static final String PATH_PREFIX = "src/test/resources/" + FOLDER_NAME;
protected static final String USERS_FILE = "users" + FILE_EXT;
protected static final String SORTED_USERS_FILE = "sorted_users" + FILE_EXT;
protected static final String USERS_XML_SCHEMA = "users_schema" + SCHEMA_FILE_EXT;
扩展了几个类,我只希望在不创建新变量的情况下定义变量FOLDER_NAME,FILE_EXT和SCHEMA_FILE_EXT。
最好的方法是什么?
答案 0 :(得分:3)
您不能将这些变量设为static
,因为它们只存在于超类中。
您可以将这些字符串传递给抽象类的构造函数:
public abstract class IStreamSorterTest<T> {
protected final String pathPrefix;
protected final String userFile;
protected final String sortedUserFile;
protected final String usersXMLSchema;
protected IStreamSorterTest(String folderName, String fileExt, String schemaFileExt) {
pathPrefix = "src/test/resources/" + folderName;
userFile = "users" + fileExt;
sortedUserFile = "sorted_users" + fileExt;
usersXMLSchema = "users_schema" + schemaFileExt;
}
}
然后在子类中:
public class SomeClass extends IStreamSorterTest<SomeType> {
private static final String FOLDER_NAME = ...;
private static final String FILE_EXT = ...;
private static final String SCHEMA_FILE_EXT = ...;
public SomeClass() {
super(FOLDER_NAME, FILE_EXT, SCHEMA_FILE_EXT);
}
}