Я пробовал искать подходящее решение, но было трудно найти его.Альтернативная реализация INSTANCEOF при наличии «многих» подклассов
Это довольно простой вопрос: существует ли эффективная альтернатива использованию INSTACEOF, когда мы хотим определить тип класса, когда есть много того instancess этого класса?
Например:
Мы есть родительский Product
класс
public abstract class Product {
public abstract String preview();
}
который имеет 3 подклассы (Винил, бронирование и видео)
public class Vinyl extends Product {
@Override
public String preview() {
return "Playing a vinyl";
}
}
public class Book extends Product {
@Override
public String preview() {
return "Reading a book";
}
}
@Override
public String preview() {
return "Playing a video";
}
Теперь я хочу, чтобы проверить в соответствии для каждого продукта типа это предварительный метод возвращал значение - Когда мы подклассы, это вполне понятно и аккуратным при написании:
public class TestProduct {
List<Product> productList = new ArrayList<>();
public void preview(Product product) {
for (Product currentProduct : productList) {
String preview = currentProduct.preview();
if (product instanceof Book) {
Assert.assertEquals(preview, "Reading a book");
} else if (product instanceof Vinyl) {
Assert.assertEquals(preview, "Playing vinyl");
} else {
Assert.assertEquals(preview, "Playing video");
}
}
}
}
Но что, если у нас нет 3 продукта, , но 100 или более? Это не делает меня в каком-то смысле письменной 100 раз это INSTACEOF
заявления .. Есть ли какой-либо правильный, масштабируемый способ?
или расширить все классы от 'interface' продукта и сделать' общий список всего, что расширяет 'продуктов и повторите его, используя цикл 'for' для каждого продукта, который у вас есть. – emotionlessbananas
Но при взаимодействии с генетическим списком. как именно я должен определить текущий тип элемента? – Nimrod
Вам разрешено использовать 'interface' вместо класса' abstract'? –