为垃圾标题道歉,如果有这个问题的术语,请更改它!感谢。
如何清理以下"模式"在我的代码中更自动化。通过这个我的意思是我可以创建一个扩展Foo的新对象,而不必为所述对象创建Foo的静态字段成员并将其添加到hashmap。
$queries = [
"DELETE FROM foo WHERE 1 = 1;",
"DELETE FROM bar WHERE 1 = 1;"
];
$connection = $this->getEntityManager()->getConnection();
$affectedRows = 0;
foreach($queries as $query)
{
$statement = $connection->prepare($query);
$statement->execute();
$affectedRows = $affectedRows + $statement->getRowCount();
}
我的主要要求是我可以通过它的ID轻松地处理每个对象,即没有幻数:
class Foo {
protected int id;
public Foo(int id) { this.id = id; }
public static final int BAR = 0;
public static final int QUX = 1;
public static HashMap<Integer, Foo> FOOS = new HashMap<>();
static {
FOOS.put(BAR, new Bar());
FOOS.put(QUX, new Qux());
}
}
class Bar extends Foo {
public Bar() { this(Foo.BAR); }
}
class Qux extends Foo {
public Qux() { this(Foo.QUX); }
}
但是他们仍然需要一个整数,以便我可以放入一个随机数,它可以查找它引用的对象:
someArray[randomIndex] = Foo.BAR;
答案 0 :(得分:0)
有点hackish,但你可以使用enum Foo
处理对象和id:
enum Foo {
QUX;
private static int idIncrementor = 0;
private int id;
Foo() {
this.id = idIncrementor++;
}
public int getId() {
return id;
}
}
然后将其嵌入到FooManager
类中,该类处理映射:
class FooManager {
private static HashMap<Integer, Foo> foos = new HashMap<>();
static {
for(Foo foo : Foo.values()) {
foos.put(foo.getId(), foo);
}
}
public static Foo getFoo(int id) {
return foos.get(id);
}
//enum Foo goes here
}
然后,您可以添加新的枚举,而无需担心每次映射它们。
要访问对象,只需执行FooManager.getFoo(#)
即可。
要查找对象的id
:FooManager.Foo.QUX.getId()
。