当前,我在应用程序中具有以下设计,该设计使用enum
作为内存有效常量
public enum Board {
Toronto // Toronto stock Exchange
}
public class Stock {
private final Board board;
private final Code code;
....
}
这是一种内存有效的方式。同样,如果在证券交易所中有成千上万个
Stock
,则将仅创建1个Board
实例。Stock stock0 = new Stock(Code.newInstance("AAA.TO"), Board.Toronto);
Stock stock1 = new Stock(Code.newInstance("AAB.TO"), Board.Toronto);
但是,这当然有一些缺点。证券交易所会不时推出新的董事会。发生此类事件时,我需要
在枚举
Board
中添加新成员编译应用程序并将其重新部署给用户
public enum Board {
Toronto, // Toronto stock Exchange
TSXV // New Toronto venture
}
Stock stock0 = new Stock(Code.newInstance("AAA.TO"), Board.Toronto);
Stock stock1 = new Stock(Code.newInstance("AAB.TO"), Board.Toronto);
Stock stock2 = new Stock(Code.newInstance("TRU.V"), Board.TSXV);
我想避免这种不便。我最初的计划是
public class Board {
private final String board;
private Board(String board) {
this.board = board;
}
public Board newInstance(String board) {
return new Board(board);
}
}
但是,这不是内存有效的方法。这样,将创建
Board
的多个实例。// 2 Toronto board instance will be created! Not memory efficient when we have huge stock list.
Stock stock0 = new Stock(Code.newInstance("AAA.TO"), Board.newInstance("Toronto"));
Stock stock1 = new Stock(Code.newInstance("AAB.TO"), Board.newInstance("Toronto"));
Stock stock2 = new Stock(Code.newInstance("TRU.V"), Board.newInstance("TSXV"));
我想知道我可以应用哪种数据结构,以便可以使用内存有效的方式表示常量(在我的上下文中,它表示
Board
类)我不喜欢使用
String
,因为我更喜欢使用安全类型来区分Board
和实际的String
。 最佳答案
嗯,如何将木板存放在集合或地图中?这样,您可以确保每个实例只有一个实例。
伪代码:
public class Board {
private static final Set<Board> boards = new HashSet<>();
public static Board getInstance(String board) {
//search if board already exists on boards set, if it is, return that instance; else, add to list and return the newly created instance.
}
//override equals and hashCode appropriately
}
关于java - 运行时创建内存有效的常量的技术,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29404648/