我想知道是否可以在Java中创建动态变量。换句话说,变量会根据我的指示而变化。
编辑重新提到我的问题,我的意思是一个类的变量,它根据给定的变量更改类型(stockType,对于那些继续读取的人)。
仅供参考,我正在制作交易计划。给定的商家将有各种价格的待售物品。
我所要求的活力是因为每种待售物品都有自己的特性。例如,book项有两个属性:int pages和boolean hardCover。相反,书签项具有一个属性String pattern。
以下是代码的骨架片段,以便您可以看到我想要做的事情:
public class Merchants extends /* certain parent class */ {
// only 10 items for sale to begin with
Stock[] itemsForSale = new Stock[10];
// Array holding Merchants
public static Merchants[] merchantsArray = new Merchants[maxArrayLength];
// method to fill array of stock goes here
}
和
public class Stock {
int stockPrice;
int stockQuantity;
String stockType; // e.g. book and bookmark
// Dynamic variables here, but they should only be invoked depending on stockType
int pages;
boolean hardCover;
String pattern;
}
答案 0 :(得分:5)
为每种股票类型对Stock
进行子类化:
public class Stock {
private int price;
private int quantity;
}
public class StockBook extends Stock {
private int pages;
private boolean hardCover;
}
public class StockBookmark extends Stock {
private String pattern;
}
或者使用Map
表示不同类型的属性:
public class Stock {
private int price;
private int quantity;
private String classification; // e.g. book and bookmark
private Map properties = new HashMap();
}
答案 1 :(得分:5)
您可能需要考虑使用多态。
public class Stock {
int stockPrice;
int stockQuantity;
int stockType;
}
public class Book extends Stock{
int pages;
boolean hardcover;
}
public class Bookmark extends Stock {
String pattern;
}
答案 2 :(得分:3)
Java不允许动态变量。相反,您应该应用面向对象的设计技术。
在这种情况下,您应该使用常用方法和成员定义抽象类 Stock ,并为类型扩展该类:预订,书签等。请参阅下面的示例。
使用Stock的抽象类(其他答案都没有显示)的优点是“Stock”项目本身并不存在。在商家货架上放置5个股票是没有意义的,就像在商家货架上放5本书一样。
public abstract class Stock {
private int stockPrice;
private int stockQuantity;
// Implement getters and setters for stockPrice and stockQuantity.
}
public class Book extends Stock {
// Since I'm extending Stock, I don't have to redefine price or quantity
private int pages;
private boolean hardCover;
// Implement getters and setters for pages and hardCover.
}
public class Bookmark extends Stock {
private String pattern;
// Implement getters and setters for pattern.
}
请注意,为了确定您以后要处理的对象类型,如果您必须,您将使用以下检查:
if (myStock instanceof Book) { ... }
答案 3 :(得分:1)
否并且有充分的理由。
无论如何要做你想要的而不是将stockType,Subclass Stock分成你想要的不同类型。
向我们举例说明您想要对动态变量做些什么,我们可以向您展示如何。
也不要使用数组。它们是固定的长度,只有像C ++一样。请改用List
。
将Stock[] itemsForSale = new Stock[10];
替换为List<Stock> itemsForSale = new ArrayList<Stock>();
并阅读List
答案 4 :(得分:0)
我不确定你想要什么,但听起来像State design-pattern可能是你要检查的东西。
答案 5 :(得分:0)
您可以在此处使用factory design pattern。原因是,基于stockType,您需要一个工厂为您提供的特定/动态对象。