假设我有这样的事情:
public abstract class AbstractDataObject
{
public abstract void gettableName();
public void delete()
{
SQLQuery("..." + getTableName()+ "..." );
}
}
public class DataObject extends AbstractDataObject
{
final static String tableName;
public String getTableName()
{
return tableName;
}
}
我希望方法delete()
为AbstractDataObject
的每个子类查询不同的表。所以我重写getTableName()
只是为了传递一个特定于每个子类的静态常量。这是可接受还是不好的做法?
答案 0 :(得分:2)
我做了很多。很多时候编写框架,基类有getType()
或getName()
或一些这样的抽象方法。派生类通常会覆盖此类以返回static
成员的值`
答案 1 :(得分:1)
在这个特定的例子中,让子类只返回一个不同的常量似乎有些过分。我会使AbstractDataClass
对象非抽象,并将表名作为构造函数参数传递。
答案 2 :(得分:0)
是的,这是一种可接受的做法。 static final
变量在Java中可能被视为一种常量,我想这是在Java代码中使用常量的可能方法之一。
但是,您的代码不正确。这里有一个更正:
public abstract class AbstractDataObject
{
public abstract String getTableName();
public void delete()
{
SQLQuery("..." + getTableName()+ "..." );
}
}
public class DataObject extends AbstractDataObject
{
final static String tableName = "some_table";
public String getTableName()
{
return tableName;
}
}
答案 3 :(得分:-1)
如果这是DataObject的唯一功能,那看起来真的太过分了,因为您可以将所有表名放在一个列表中并循环遍历它:
List<String> tables = new List<String>{ "TabA","TabB","TabC"};
foreach( var tname in tables )
{
deleteTable(tname);
}
我知道,通过查看您的代码,您还需要访问SQLQuery,但我也会将其移出AbstractDataObject。
评论后:好的,没问题,那么这是我的建议:public abstract class AbstractDataObject
{
private String tableName;
public AbstractDataObject(String tableName)
{
this.tableName = tableName;
}
public void delete()
{
SQLQuery("..." + tableName + "..." );
}
}
public class SellerDataObject extends AbstractDataObject
{
public DataObject(): super("Seller")
{
}
}