Java 从扩展类访问属性

Java 从扩展类访问属性,java,Java,我正试图包装一个模型结构,以访问一个数据库,灵感来自Laravel的Elount(PHP) 基本上我有一个名为Model的类,现在它只是空的 然后我得到了另一个名为User的类,它扩展了Model public class User extends Model { private String table = "users"; } 如您所见,用户类还获得了一个名为table的属性,该属性引用了模型所表示的数据库上的表 在我的Model.java中,我试图获取表的名称 到目前为止,我正

我正试图包装一个模型结构,以访问一个数据库,灵感来自Laravel的Elount(PHP)

基本上我有一个名为
Model
的类,现在它只是空的

然后我得到了另一个名为
User
的类,它扩展了
Model

public class User extends Model {

    private String table = "users";
}
如您所见,用户类还获得了一个名为table的属性,该属性引用了模型所表示的数据库上的表

在我的
Model.java
中,我试图获取表的名称

到目前为止,我正在我的
Model.java
构造函数上运行一些代码,我在实例上遍历了所有字段。这给了我一个Field对象,但我无法从
Model.java

Model.java

public abstract class Model {

    public Model()
    {
        List<Field> fields = new ArrayList<>();
        for (Class<?> c = this.getClass(); c != null; c = c.getSuperclass()) {
            fields.addAll(Arrays.asList(c.getDeclaredFields()));
        }
        for (Field field : fields)
        {
            String name = field.getName(); //returns "table"
        }
    }
}
公共抽象类模型{
公共模型()
{
列表字段=新的ArrayList();
for(类c=this.getClass();c!=null;c=c.getSuperclass()){
addAll(Arrays.asList(c.getDeclaredFields());
}
用于(字段:字段)
{
String name=field.getName();//返回“table”
}
}
}
总之,我需要的是从扩展模型的类中获取表名


有什么想法吗?或者这是一种不好的做法

模型应该有一个抽象方法,
getTableName

是的,这是一种不好的做法,因为类不应该知道从它继承的类的详细信息

按照您的方式,没有约定指定子类必须实现该字段

通过创建一个必须由子类实现的方法,就有了一个明确的约定,并且您正在应用依赖项反转原则。看


模型应该有一个抽象方法getTableName。这是一种不好的做法,一个类永远不应该知道继承它的类的详细信息。你愿意告诉我你将如何做到这一点吗?:)我以前从未真正使用过抽象方法。您将在扩展类中使用具体方法覆盖它,为您的私有变量创建一个简单的getter。但这意味着我必须为扩展模型的每个类创建该方法,对吗?为什么不让子类利用您定义的注释?默认情况下,类的名称(或其复数形式)是表的名称。我真的明白你的意思,但我还是创建一个接口为好。这样,我必须在每个类中实现相同的方法,这基本上是相同的。相同吗?他们不是都会返回一个不同的表名吗?啊,我明白你的意思了。编辑清楚了,谢谢:)
public abstract class Model {

    public Model() {}

    abstract String getTableName();
}

public class User extends Model() {
    public String getTableName(){
      return "users";
    }
}