我试图为其他人创建一个简单的编程体验,以扩展我正在开发的应用程序的类结构。我目前在实习期间工作,但我工作的公司希望最终的应用能够让他们轻松添加小更新(简单的添加,不需要完整的重新雇用。它不是那样的他们不想再雇用我了。)
我有一个抽象类:
abstract class ProductEntry {
protected String title;
protected String subtitle;
protected int[] imageArray;
protected String downloadLink;
protected String description;
public ProductEntry() {
}
/*
~Getters and Setters~
*/
}
这是一个扩展它的示例类:
public class GenericEntry extends ProductEntry {
private String newTitle = "This Title";
private String newSubtitle = "That Subtitle";
private int[] newImageArray = new int[]{R.drawable.picture1, R.drawable.picture2};
private String newDownloadLink = "www.google.com";
private String newDescription = "This is where my description would go, if I had one!";
public GenericEntry() {
}
@Override
public void setTitle(String title) {
super.setTitle(newTitle);
}
@Override
public void setDownloadLink(String downloadLink) {
super.setDownloadLink(newDownloadLink);
}
@Override
public void setImageArray(int[] imageArray) {
super.setImageArray(newImageArray);
}
@Override
public void setSubtitle(String subtitle) {
super.setSubtitle(newSubtitle);
}
@Override
public void setDescription(String description) {
super.setDescription(newDescription);
}
}
我这样做是因为我想编写我的应用程序将所有子类放入一个数组中:
ProductEntry allEntries = new ProductEntry[numOfEntries]
然后,我将使用所有条目根据列表中的选择填充通用布局。
TextView title = (TextView) findViewById(R.id.txtTitle);
title.setText(allEntries[position].getTitle());
// Repeat for subtitle and description's TextView,
// populate ImageViews with pictures from the imageArray,
// and update the URL link of a button.
我选择这样做的原因是,因为将来可能希望更新应用程序的人不会是程序员并且不是非常精通技术,我可以向他们展示GenericEntry,向他们展示如何复制类,更改类名,然后告诉他们替换变量。
这样,他们不需要复制布局,并被迫创建一个全新的活动并将其分配给ListView。我想通常我会创造一个独特的"每个条目的(个人)布局,但由于他们希望稍后使用新条目扩展它,我试图创建一个后端,所以他们只需要填补空白。
这也应该允许我轻松地在应用程序中填充有关其产品的信息。
问题是,我确定你可以告诉我,我试图将变量传递给子类,而这些是你不能用Java做的,因为那不是继承的工作方式。 (当我开始这样做的时候,我还没有完成Java,所以我没有立刻意识到这个错误。)
我的问题是如何在保留其目的的同时改进这个系统?
我应该尝试放弃抽象类吗?我是android dev的新手,所以我不确定是否有更好的方法将这类信息传递给活动。
答案 0 :(得分:0)
如果要求子类提供信息,可以使用构造函数(在抽象类中):
abstract class ProductEntry {
protected String title;
protected String subtitle;
protected int[] imageArray;
protected String downloadLink;
protected String description;
ProductEntry(String title, String subtitle, int[] imageArray, String downloadLink, String description) {
this.title = title;
this.subtitle = subtitle;
this.imageArray = imageArray;
this.downloadLink = downloadLink;
this.description = description;
}
/*
* ~Getters and Setters~
*/
}
这会强制子类提供信息,如下所示:
public class GenericEntry extends ProductEntry {
private static String newTitle = "This Title";
private static String newSubtitle = "That Subtitle";
private static int[] newImageArray = new int[]{R.drawable.picture1, R.drawable.picture2};
private static String newDownloadLink = "www.google.com";
private static String newDescription = "This is where my description would go, if I had one!";
public GenericEntry() {
super(newTitle, newSubtitle, newImageArray, newDownloadLink,newDescription);
}
}