抽象类返回

2023-12-21

抱歉,如果这是一件小事。我创建了一个带有一些子类的抽象类。控制器类创建请求子类类型的抽象类类型的对象,并返回实现的抽象类。 子类具有特定的属性。我无法访问返回对象的这些属性,因为这是抽象类默认类型,所以我尝试进行转换。但这会出现错误“item.Default 无法转换为 item.cloth”

如何修复它?

Code:

public class testMain {

    public void main(int id) {
    Product test;

    switch(ProductController.getCategory(id)) {
    case "Cloth":
        test = (cloth) ProductController.getProduct(id);
        break;
    case "Wear":
        test = (wear) ProductController.getProduct(id);
        break;
    default:
        test = (Default) ProductController.getProduct(id);
    }

    System.out.println("Product No : " + test.ProductNo);
    System.out.println("Title : " + test.Title);
    System.out.println("Description : " + test.Desc);
    System.out.println("Short Description : " + test.ShortDesc);
    System.out.println("Regular Price : " + test.RegularPrice);
    System.out.println("Sale Price : " + test.SalePrice);
    System.out.println("Category : " + test.Category);

    if(((String) test.Category).split(",")[1].contentEquals("cloth")) {
        System.out.println("Size : " + ((cloth) test).size);
        System.out.println("Age : " + ((cloth) test).age);
    }else if(((String) test.Category).split(",")[1].contentEquals("wear")) {
        System.out.println("Brand : " + ((wear) test).Brand);
    }
}
}

public class ProductController {
private static ProductDB prodDB = new ProductDB();

public static Product getProduct(int prodID) {
    Product product;

    List<Object> prodTemp = prodDB.getProductDetails(prodID);
    String Category[] = ((String) prodTemp.get(6)).split(",");

    switch(Category[1]) {
    case "Cloth":
        product = new cloth(...);
        break;
    case "Wear":
        product = new wear(...);
        break;
    default:
        product = new Default(...);
    }

    return product;
}

public static String getCategory(int prodID) {
    return prodDB.getCategory(prodID).split(",")[1];
}
}

public abstract class Product {

public int ProductNo;
public String Title;
public String Desc;
public String ShortDesc;
public float RegularPrice;
public float SalePrice;
public boolean StockStatus;
public String Category;

public void setRegularPrice(float regularPrice) {
    RegularPrice = regularPrice;
    setSalePrice(regularPrice);
}

protected abstract void setSalePrice(float regularPrice2);

public float getSalePrice() {
    return SalePrice;
}

public void setStockStatus(boolean stockStatus) {
    StockStatus = stockStatus;
}

public boolean isInStock() {
    return StockStatus;
}
public Product(int productNo2, String title, String desc, String shortDesc, float regularPrice, boolean stock, String Category) {
    ProductNo = productNo2;
    Title = title;
    Desc = desc;
    ShortDesc = shortDesc;
    setRegularPrice(regularPrice);
    StockStatus = stock;
    this.Category = Category;
}
public Product(int productNo, String title, String desc, String shortDesc) {
    ProductNo = productNo;
    Title = title;
    Desc = desc;
    ShortDesc = shortDesc;
}
public Product(int productNo, String title, String desc, String shortDesc, float regularPrice) {
    ProductNo = productNo;
    Title = title;
    Desc = desc;
    ShortDesc = shortDesc;
    setRegularPrice(regularPrice);
}
}

public class cloth extends Product{
public String size;
public int age;

public cloth(int productNo, String title, String desc, String shortDesc, float regularPrice, boolean stock, String Category, String size, int age) {
    super(productNo, title, desc, shortDesc, regularPrice, stock, Category);
    this.size = size;
    this.age = age;

}

@Override
protected void setSalePrice(float regularPrice2) {
    SalePrice = (float) (regularPrice2 * 0.85);
}

}

你必须把break每次开关盒后。如果你测试这段代码:

public static void main(String[] args) {

        int test = 2;
        switch (test){
            case 1:
                System.out.println("One");
            case 2:
                System.out.println("Two");
            case 3:
                System.out.println("Three");
            default:
                System.out.println("Default");

        }
}

你会得到这个输出:

Two
Three
Default

所以上面的代码必须改成这样:

 public static void main(String[] args) {

        int test = 2;
        switch (test){
            case 1:
                System.out.println("One");
                break;
            case 2:
                System.out.println("Two");
                break;
            case 3:
                System.out.println("Three");
                break;
            default:
                System.out.println("Default");

        }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抽象类返回 的相关文章

  • 在 Java 中重新抛出异常而不丢失堆栈跟踪

    在 C 中 我可以使用throw 语句重新抛出异常 同时保留堆栈跟踪 try catch Exception e if e is FooException throw Java中有没有类似的东西 不会丢失原始堆栈跟踪 catch Whate
  • CDI 对象无法使用注入的构造函数进行代理

    当尝试将参数注入 CDI bean ApplicationScoped 的构造函数时 我遇到以下问题 Caused by org jboss weld exceptions UnproxyableResolutionException WE
  • CustomTaskChange 在调用 updateSQL 时实际执行

    我有一个CustomTaskChange在 Liquibase 中 除了其他变更集 我希望我的应用程序在实际执行之前显示所有 ChangeSet 的 SQL 以我的理解 updateSQL应该预览 SQL 并且不执行任何操作 ACustom
  • Vaadin框架播放视频

    我可以使用 Vaadin Framewotk 播放视频吗 主要思想是从本地驱动器加载 flv 或 avi 格式的视频文件 并使用 vaadin 框架在网络上播放 谢谢 Sampler中有一个示例 http demo vaadin com s
  • AJAX(原型/java)在执行期间获取部分状态更新

    这部分模仿了AJAX 原型 php 在脚本执行期间获取部分状态更新 https stackoverflow com questions 800997 ajax prototype php getting partial status upd
  • 对 Java Servlet 进行单元测试

    我想知道对 servlet 进行单元测试的最佳方法是什么 只要内部方法不引用 servlet 上下文 测试内部方法就不是问题 但是测试 doGet doPost 方法以及引用上下文或使用会话参数的内部方法呢 有没有办法简单地使用经典工具 例
  • 如何统计lucene索引中每个文档的term数?

    我想知道 lucene 索引中每个文档的术语数量 我一直在 API 和互联网上搜索 但没有结果 你能帮助我吗 Lucene 的构建是为了回答相反的问题 即哪些文档包含给定术语 因此 为了获取文档的术语数量 您必须进行一些修改 第一种方法是存
  • 为什么在java中加载JNI是在静态初始化程序中完成的?

    在许多使用 JNI 的示例中 我看到类似以下内容 class SampleClass static System loadLibrary somelib 这种特殊语法的目的是什么 为什么使用这个 而不仅仅是在类构造函数或类似的东西中 我想你
  • 错误:libXext.so.6:无法打开共享对象文件:没有这样的文件或目录[重复]

    这个问题在这里已经有答案了 运行尝试打开 ods 文件的 java 文件时出现以下错误 线程 main 中出现异常 java lang UnsatisfiedLinkError opt software jdk1 6 0 45 jre li
  • Java JDT 解析器。获取VariableDeclarationFragment的变量类型

    我一直在用 JDT 实现 Java 解析器 但我不知道当变量的节点类型为变量声明片段 我只有在涉及到时才发现如何获取变量类型变量声明 我的代码如下 public boolean visit VariableDeclarationFragme
  • android 中的 lang.NumberFormatException

    我有以下代码 除了在后台线程中从数据库读取一些值并使用这些值之外什么也不做 我使用 jar 绘制折线图 对于我用于每个数组值的折线图 问题是第三个我传递给绘制 LineChart 的构造函数的参数是 float float viteza S
  • 是否可以使用“WHERE”子句来选择SQL语句中的所有记录?

    晚上好 我很好奇是否可以在 SQL 语句中创建一个 WHERE 子句来显示所有记录 下面一些解释 随机 SQL 语句 Java JSP示例 正常情况 String SqlStatement SELECT FROM table example
  • Eclipse 错误:“设置构建路径”遇到错误

    我正在使用一个名为 jtwitter 的 API 它有一个 jar 文件 jtwitter jar 我一直在使用它并使用 git 维护它 我把代码托管在github上 有些天 我没有碰过它的代码 今天 当我克隆我的 git repo 时 实
  • android.R.layout.simple_list_item_1是什么?

    在我看到的所有示例中 他们在创建 ArrayAdapter 时仅使用 android R layout simple list item 1 android R layout simple list item 1是什么 它只是一个名为sim
  • 通过命令行增加Java中的MaxPermSize内存

    您能否解释一下如何增加此 PermSpace 大小 我正在使用 Gate 应用程序并加载大量数据和大量插件 不幸的是每次运行后都会出现有关内存不足 maxPermSpace 的错误 我到处搜索 但我找不到如何通过命令行增加这个大小 或者可能
  • 通过命令行参数更改默认的 ant 目标

    最近我被分配了一个任务 让ant能够为不同的环境构建war包 除了一项功能外 我几乎完成了 蚂蚁接受一个env参数类似 Denv DEV 并使用不同的配置文件来制作war包 但默认目标是start它将构建 部署并启动 tomcat 我不希望
  • 如何指示 yum 安装特定版本的 OpenJDK

    我尝试安装openjdk in the redhat服务器 如何安装指定版本 我要安装的版本是 11 0 4 使用以下命令安装的版本是11 0 6 yum install java 11 openjdk devel 曾与 yum showd
  • 如何为信号量中等待的线程提供优先级?

    我使用信号量来限制访问函数的线程数量 我希望接下来要唤醒的线程应该由我将给出的某个优先级选择 而不是默认信号量唤醒它们的方式 我们怎样才能做到这一点 这是实现 class MyMathUtil2 implements Runnable do
  • 删除子类中的注释?

    我有一个子类 需要一个注释 在删除的父类中声明 做这个的最好方式是什么 public class Parent MyAnnoation String foobar public class Child extends Parent here
  • 为什么在 this 方法中添加 If 语句会大大降低速度?

    我在中遇到过这个回答另一个问题 https stackoverflow com questions 12233594 faster way to apply alpha to a jpeg in an android app 我试图诊断哪些

随机推荐

  • IO异常:Oracle升级到12g后出现Oracle Error ORA-12650

    在我们的 Oracle DB 从 11g 升级到 12g 后 我们得到了下面的堆栈跟踪 Io exception Oracle Error ORA 12650 我该如何解决这个问题 2015 10 26 14 59 36 319 RMI T
  • 需要一个插入行并返回 ID 的存储过程

    我尝试编写一个存储过程 首先将新记录插入表中 然后返回该新记录的 id 我不确定这是否是实现这一目标的正确方法和最佳方法 ALTER PROCEDURE dbo spAddAsset Name VARCHAR 500 URL VARCHAR
  • minitest - 模拟 - 期望关键字参数

    当我想验证模拟是否发送了预期的参数时 我可以这样做 mock expect fnc nil a b 但是 如果我想模拟的课程看起来像这样 class Foo def fnc a b end end 我如何模拟它并验证传递的值a b 下面是我
  • 判断一个数是完美数还是素数

    问题是 编写一个函数来判断一个数是素数还是完全数 到目前为止 我已经首先完成了完美的部分 这就是我所拥有的 include
  • Excel 如何比较 2 列范围

    我正在尝试比较 Excel 中的两组列范围 我知道标准比较公式 Eg A1 E1 我正在寻找的是以下公式的替代品 AND A1 E1 B1 F1 C1 G1 由于列数很大 我在想是否可以使用单元格范围 比 Chronocidal慢一点 只是
  • 星际争霸、帝国时代等即时战略游戏的协议是什么样的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我对这些类型的游戏的协议 和游戏循环 如何工作感兴趣 任何指示或见解表示赞赏 我猜想主循环会有一个世界状态 每秒会前进几个 滴答声 但
  • 如何阻止 gke-metadata-server 继续生成此日志?

    我创建了一个部署 意味着在启用工作负载身份的情况下将消息从 pubsub 插入到 bigquery 云日志不断向我发送此类日志 insertId test jsonPayload message rpc id test computeMet
  • 是否有关于 Dagger 在注入依赖项时何时回退到反射的文档?

    我的团队在我们的 Android 应用程序中采用了 Dagger 进行依赖注入 我必须说到目前为止我们很喜欢它 然而 我们希望确保我们有效地使用它 我想知道是否有人可以解释或者是否有任何文档解释 Dagger 回退到反射来注入依赖项的情况
  • 如何使用 EmberJS 在路由中加载 ownTo/hasMany 关系

    在我的 Ember JS 应用程序中 我显示了一个约会列表 在约会控制器的操作中 我需要获取约会所有者 但所有者始终返回 未定义 我的文件 模型 appointment js import DS from ember data export
  • R CMD 检查因“未定义的导出”而失败

    我正在尝试创建 R 包 但不断收到错误 Error in namespaceExport ns exports undefined exports MCLE defineFunctions naiveMLE 跑步时R CMD check在我
  • JPA2 Criteria API 运行时从 varchar(25) 转换为十进制

    因此 我已经看到类似主题上堆栈溢出的所有线程 但我没有找到解决我的问题的方法 我正在尝试创建一个 Criteria 查询 并得到以下 SQL 第一个 SQL 简化版 SELECT latitude FROM stations WHERE A
  • Javascript momentjs 将 UTC 从字符串转换为日期对象

    各位 在处理 moment js 文档时遇到困难 record lastModified moment utc format returns 2014 11 11T21 29 05 00 00 太棒了 它是 UTC 当我将其存储在 Mong
  • 在 Windows 上使用 C 将数据流式传输到声卡 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 作为大学项目的一部分 我必须进行一些信号处理 并希望使用 PC 声卡输出结果 该软件必须用 C 语言编写
  • 如何正确使用批处理 Tensorflow 数据集?

    我是 Tensorflow 和深度学习的新手 并且在 Dataset 类上遇到了困难 我尝试了很多方法 但找不到好的解决方案 我正在尝试什么 我有大量图像 500k 来训练我的 DNN 这是一个去噪自动编码器 所以我每个图像都有一对 我正在
  • ActionBar 菜单项中的 orderInCategory 是什么以及为什么它用于..?

    我正在处理操作菜单项及其溢出项 这是我的main menu xml menu menu
  • 如何让 Maven 构建更快?

    我有一个多模块java项目 Maven 大约需要 40 秒来构建它 我也尝试过使用多线程构建 Maven 方法是指定 T 和 C 参数来表示不使用任何线程和核心 但我还没有看到我的构建的墙时间有任何显着的改进 我正在使用 maven 3 2
  • 如何防止每次运行整个笔记本时运行“pip install ...”?

    我运行的大多数 python 笔记本在初始运行时往往需要一些设置 使用 pip install 每次运行笔记本时都执行设置代码效率很低 因此我宁愿避免这种情况 另外 我不想将设置代码移动到不同的笔记本 因为通常它只是几行代码 我的解决方案是
  • 在 Python 中将 ASCII 代码列表转换为字符串(字节数组)

    我有一个整数 ASCII 值列表 需要将其转换为字符串 二进制 以用作加密操作的密钥 我正在用python重新实现java加密代码 这是可行的 假设密钥是 8 字节 key struct pack BBBBBBBB 17 24 121 1
  • 如何在Linux上列出非空子目录?

    我有一个包含多个子目录的目录 我只想列出那些至少包含一个文件的子目录 我怎样才能做到这一点 find mindepth 1 maxdepth 1 not empty type d 将为您提供所有非空目录 如果您想排除仅包含其他目录 但不包含
  • 抽象类返回

    抱歉 如果这是一件小事 我创建了一个带有一些子类的抽象类 控制器类创建请求子类类型的抽象类类型的对象 并返回实现的抽象类 子类具有特定的属性 我无法访问返回对象的这些属性 因为这是抽象类默认类型 所以我尝试进行转换 但这会出现错误 item