好的,我有一个名为Product的抽象类,以及从Product继承的两个类和服装。我也有第三类
public class ProductParser
{
public static Product parseStringToProduct(String lineToParse)
{
String[] inputToken = lineToParse.split("/");
if (inputToken[0].equalsIgnoreCase("Food"))
{
= new Food(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], Double.parseDouble(inputToken[5]), inputToken[6]);
}
else
{
= new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);
}
}
}
此方法将解析字符串,提取信息,使用带有对象属性的构造函数创建新的Clothing或Food对象,并将其返回给调用方法。
尝试返回对象时遇到了麻烦。 IDE告诉我需要返回Product类型的结果,但Product类是抽象的,无法实例化。
我应该如何创建这些对象并将其返回?
编辑: 我故意遗漏了返回关键字,因为我认为我应该创建一个变量或对象然后返回。我现在明白,Class和Food本身就是(继承的整个概念,愚蠢的我)产品,可以简单地返回。谢谢大家的答案。现在看起来很明显......
答案 0 :(得分:1)
这是多态性的基本情况,食品或服装可以作为产品退回,因为食品ISA产品和服装ISA产品
你想做什么,可以这样做:
public static Product parseStringToProduct(String lineToParse)
{
Product p=null;
String[] inputToken = lineToParse.split("/");
if (inputToken[0].equalsIgnoreCase("Food"))
{
p = new Food(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], Double.parseDouble(inputToken[5]), inputToken[6]);
}
else
{
p = new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);
}
return p;
}
或者不是将其分配给产品变量,而是直接从if-else块
返回希望这有帮助!
祝你好运!答案 1 :(得分:0)
看看这是否有帮助: -
String[] inputToken = lineToParse.split("/");
Product product = null;
if (inputToken[0].equalsIgnoreCase("Food"))
{
product = new Food(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], Double.parseDouble(inputToken[5]), inputToken[6]);
}
else
{
product = new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);
}
return product;
答案 2 :(得分:0)
您忘记了return
关键字:
public class ProductParser
{
public static Product parseStringToProduct(String lineToParse)
{
String[] inputToken = lineToParse.split("/");
if (inputToken[0].equalsIgnoreCase("Food"))
{
return new Food(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], Double.parseDouble(inputToken[5]), inputToken[6]);
}
else
{
return new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);
}
}
答案 3 :(得分:0)
您需要扩展Product
类并创建一个具体的类,然后才能实例化它。
由于Clothing
和Food
是Product
的类型,您只需将其分配给Product
类型的变量即可。
实际上,在这里你可以在不声明变量的情况下返回它们。例如:
return new Clothing(inputToken[1], Integer.parseInt(inputToken[2]), Double.parseDouble(inputToken[3]), inputToken[4], inputToken[5]);