Я хотел бы использовать оператор try-with-resources
для определения объекта интерфейса как конкретного класса. Вот пример кода, в общих чертах определяющий мой интерфейс и классы.
interface IFoo extends AutoCloseable
{
...
}
class Bar1 implements IFoo
{
...
}
class Bar2 implements IFoo
{
...
}
class Bar3 implements IFoo
{
...
}
// More Bar classes.........
Теперь мне нужно определить объект IFoo
, но конкретный класс зависит от другой переменной моего кода. Логика одинакова для всех конкретных классов. Поэтому я хотел бы использовать оператор try-with-resources
для определения объекта интерфейса, но мне нужно использовать условный оператор, чтобы увидеть, какой конкретный класс мне нужно определить как объект интерфейса.
Логически, это то, что я хочу сделать:
public void doLogic(int x)
try (
IFoo obj;
if (x > 0) { obj = new Bar1(); }
else if (x == 0) { obj = new Bar2(); }
else { obj = new Bar3(); }
)
{
// Logic with obj
}
}
Единственный ресурс, который я нашел по этому поводу, - это вопрос @Denis здесь: Как использовать Try-with-resources с оператором if? Однако приведенное там решение потребует вложенных троичных операторов для моего сценария, и это очень быстро становится беспорядочным.
Кто-нибудь знает элегантное решение этой проблемы?