java - 是否可以在 Java 的编译时接收子类的名称?
问题描述
我正在尝试在 java 中创建一个小吃机实现。我创建了一个名为的抽象类Product
,它将为每个提供的产品提供基本设计。
我的意思是我们有abstract class Product
继承自.Nachos
Cake
Product
Product
类不包含太多,它只包含产品的name
、price
和available amount
(这些是类中的字段)。
它还具有get
用于仅返回每个字段值的字段的方法。
问题是我想将name
产品的 设置为 astatic final
因为如果产品的名称是Nachos
,它不会被更改。我的意思是可以创建更多Nachos
对象,但它们的类的名称仍然是Nachos
.
所以没有理由不这样做static final
。
问题是我不确定如何正确设置它。
public abstract class Product {
private static final String productName = getClass().getSimpleName();
private int price;
private int amount;
....
Constructor..
Get methods..
我考虑过getClass().getName()
,getSimpleName()
但它给了我一个 IDE 错误,这表明我也使用该字段static final
以及使用该字段的唯一方法getClass
是编写Product.class.getName();
.
问题是,如果我这样做,将返回的名称是Product
而不是Cake
或Nachos
或其他子类。
解决方案
如果您的类有一些描述该类的属性(例如产品名称),那是该类的一个属性。您不应该编写将类本身的名称与 getClass().getName() 一起使用的代码,这会将您的业务逻辑与实现细节联系起来,并且没有理由(或很少有充分的理由),为什么您的代码需要知道类本身的名称。
相反,在你的类中添加一个像 productName 这样的属性:
public class Product{
private String productName;
public Product(String name){
this.productName = name;
}
public String getProductName(){
return this.productName;
}
}
推荐阅读
- r - 在集群上运行 R 脚本时出错
- c# - 比较值时的 SQL IN 子句问题
- php - Docker:PHP 启动:无法加载动态库 'pgsql'
- azure-devops-migration-tools - 这可以从 Azure Devops 迁移到 TFS 环境吗?
- c# - 修改 .tt 文件 c# 以生成继承
- r - 没有绘图函数 eulerr 的绘图
- java - 无法从 jar 的 java 命令行加载主类
- python - 使用 python BeautifulSoup 从使用 jinja 占位符的网站中检索值
- react-native - 反应本机 Navigation.openDrawer 不起作用
- c# - 错误“在“资源”中多次指定了项目“obj\Debug\abcd.Global.resources”。“资源”参数不支持重复项目