gpt4 book ai didi

java - 设计模式 - 静态变量的继承

转载 作者:行者123 更新时间:2023-12-01 23:53:03 25 4
gpt4 key购买 nike

我有一个 Person 类,它扩展了我的 Record 类,我想将数据库表名称、列和列类型定义为 Person 类中的静态变量。我想做类似下面的事情,但我不能,因为不在方法中时我无法修改对象(我认为?这里是java noob)。

class Person extends Record{
protected static final String dbTable = "people";
protected static LinkedHashMap<String, String> dbColumns = new LinkedHashMap<String, String>();
dbColumns.put("id","integer");
dbColumns.put("name", "text");
}

我可以执行以下操作,但它看起来很困惑并且不太可读,特别是如果我的表有几列

class Person extends Record{
protected static final String dbTable = "people";
protected static final String[] dbColumns= {"id","name"};
protected static final String[] dbColumnTypes= {"integer","text"};

}

我不想在构造函数中定义这些,因为我想要在父类(Record)中有一个静态方法,我可以执行如下操作来获取人员记录列表

List<Person> people = Person.getAll();

我最初的想法是在 Record 类中创建以下抽象方法,并且它们在 Person 类中的实现将返回适当的静态变量。

public abstract String getTableName();
public abstract String[] getColumnNames();
public abstract String[] getColumnTypes();

但是我不能这样做,因为我的静态方法 getAll() 无法引用非静态方法。我如何让我的静态方法 getAll() 知道这些静态变量存在于扩展类中并且可以使用它们?

我知道有一个正确的方法可以做到这一点,但我只是不明白。

最佳答案

您可以使用抽象方法执行您正在执行的操作,然后您所需要做的就是将静态 getAll() 更改为类似于 getAll(Record record) 的内容,然后让它调用这些方法。

你走在正确的道路上。我会避免在类本身之外的任何事情上依赖静态事物,而倾向于公开本身可能调用私有(private)或 protected 静态字段的实例方法。

关于java - 设计模式 - 静态变量的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16074770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com