У меня есть абстрактный класс Products
с двумя подклассами Mouse
, Keyboard
.
Мой обработчик файлов читает атрибуты из базы данных и определяет, какой объект мы хотим создать.
Подклассы сначала вызывают суперкласс для обработки методов проверки, общих для mouse
и keyboard
, затем подкласс обрабатывает уникальную проверку. Я надеюсь, что так или иначе, код продолжается после вызова super()
в подклассах?
Потенциальная проблема, с которой я сталкиваюсь, заключается в том, что мне нужно объявить и создать экземпляр объекта в моем классе обработчика файлов, который я предположим, что это не идеально, так как я хотел бы создать экземпляр объекта в подклассах mouse
или keyboard
, но Java хочет, чтобы я провоцировал внутри обработчика файла вызов Mouse(String attribute1, ...)
abstract class Products
{
protected String barcode;
protected String brand;
protected boolean wireless;
protected int quantity;
protected double originalCost;
protected double retailCost;
//Setters that are common to both mouse and keyboard objects
protected Products(String barcode, String brand, String wireless, String quantity, String originalCost, String retailCost)
{
//set barcode
if(barcode.length() == 6 && barcode.matches("^[0-9]*$"))
{
this.barcode = barcode;
}
else
{
System.out.println("Invalid barcode attribute");
}
//ect ect for other attributes
}
public class Keyboard extends Products
{
String productType;
String layoutType;
public Keyboard(String barcode, String brand, String wireless, String quantity, String originalCost, String retailCost, String productType, String layoutType)
{
//call super
super(barcode, brand, wireless, quantity, originalCost, retailCost);
//validate productType and assign values ect ect
}
}
public void readFile()
{
while(x.hasNext())
{
String barcode = x.next();
String name = x.next();
String type = x.next();
String brand = x.next();
String colour = x.next();
String connectivity = x.next();
String quantity = x.next();
String originalCost = x.next();
String retailCost = x.next();
String additionalInfo = x.next();
switch(name)
{
case "keyboard":
Keyboard(barcode, brand, connectivity, quantity, originalCost, retailCost, type, additionalInfo);
}
}
}