Да, это хороший способ.Возможно, вы можете указать с помощью дженериков принятый тип:
public abstract class Thing<S, G> {
private G value;
public void setValue(S object);
public G getValue();
}
public class Thing1 extends Thing<String, String> {..}
public class Thing2 extends Thing<ResourceHolder, String> {..}
Где ResourceHolder
- это простой компонент с геттерами и сеттерами для InputStream
и File
.S
и G
означают setter и getter - вы указываете, что вы ожидаете установить, и что ожидает клиент, когда он вызывает get
Таким образом, каждый подкласс может обрабатывать ровно один тип значения, ноэтот тип может содержать несколько вариантов.Таким образом, вместо рефлексии вы бы использовали простой null
чек.