我正在考虑使用 Guava 库中的 Optional
我正在做这样的事情:
class MatrixOfObjects() {
private Optional<MyObjectClass>[][] map_use;
public MatrixOfObjects(Integer nRows, Integer nCols) {
map_use = (Optional<MyObjectClass>[][]) new Optional[nRows][nCols];
// IS THIS CAST THE ONLY WAY TO CRETE THE map_use INSTANCE?
}
public MyObjectClass getCellContents(Integer row, Integer col) {
return map_use[row][col].get();
}
public void setCellContents(MyObjectClass e, Integer row, Integer col) {
return map_use[row][col].of(e);
// IS THIS THE CORRECT USE OF .OF METHOD?
}
public void emptyCellContents(Integer row, Integer col) {
map_use[row][col].set(Optional.absent());
// BUT SET() METHOD DOES NOT EXIST....
}
public Boolean isCellUsed(Integer row, Integer col) {
return map_use[row][col].isPresent();
}
}
我对上面的代码有三个问题:
- 如何创建可选数组数组的实例?
- 如何将MyObjectClass对象分配给单元格(我认为这应该是正确的)
- 如何分配"清空"单元格,使其不再包含引用?
我想我错过了这个可选类的一些基本内容。
谢谢
我修复了代码中的一些错误,并添加了注释来解释:
class MatrixOfObjects { // class declaration should not have a "()"
private Optional<MyObjectClass>[][] map_use;
public MatrixOfObjects(Integer nRows, Integer nCols) {
map_use = (Optional<MyObjectClass>[][]) new Optional[nRows][nCols];
}
public MyObjectClass getCellContents(Integer row, Integer col) {
return map_use[row][col].get();
}
public void setCellContents(MyObjectClass e, Integer row, Integer col) {
// removed "return" keyword, since you don't return anything from this method
// used correct array assignement + Optional.of() to create the Optional
map_use[row][col] = Optional.of(e);
}
public void emptyCellContents(Integer row, Integer col) {
// unlike lists, arrays do not have a "set()" method. You have to use standard array assignment
map_use[row][col] = Optional.absent();
}
public Boolean isCellUsed(Integer row, Integer col) {
return map_use[row][col].isPresent();
}
}
以下是创建泛型数组的一些替代方法:如何在 Java 中创建泛型数组?
请注意,如果您不太了解 Java 如何处理泛型,则很难同时使用数组和泛型。使用集合通常是更好的方法。
综上所述,我会使用 Guava 的 Table 接口而不是你的"MatrixOfObjects"类。