我有这个问题,我根本无法理解。我目前正在为学校开发一个Android项目。我有一种情况,我有一个父模型类和其他几个扩展它。这些模型都具有类似的存储机制(数据库)。因此,findAll()
等方法调用对于所有模型来说都或多或少相同。如何在父类中实现此findAll()
调用,该类将返回作为调用者子类类型的对象的ArrayList?
到目前为止,这是我的代码的一部分:
DEModel.java
public abstract class DEModel {
private static final String apiBasePath = "http://10.0.0.2:3000/api/";
public static ArrayList<> getAll() {
// 1. Make the API call
// 2. Get the JSON result
// 3. Extract objects from the JSON by calling the appropriate
// parser depending on the object type
// 4. wrap the objects in an ArrayList and return them
}
}
Hotel.java
public class Hotel extends DEModel {
}
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<Hotel> hotels = Hotel.getAll();
}
}
在DEModel.java
文件中,如何指定可以从调用者子类中自动计算出来的类型?我甚至可以在静态环境中这样做吗?
谢谢, 塔姆拉特
答案 0 :(得分:1)
你可以使用接口 java中最好的多态多态
界面
public interface DataObject {
}
酒店
public class Hotel extends DEModel implements DataObject {
}
模型
public abstract class DEModel {
private static final String apiBasePath = "http://10.0.0.2:3000/api/";
public static ArrayList<DataObject> getAll() {
// 1. Make the API call
// 2. Get the JSON result
// 3. Extract objects from the JSON by calling the appropriate
// parser depending on the object type
// 4. wrap the objects in an ArrayList and return them
}
}
所以你可以使用
ArrayList<DataObject> hotels = Hotel.getAll();
注意你必须将每个对象都投射到酒店以使用它的方法和变量,就像那样
ArrayList hotels = Hotel.getAll(); for(DataObject obj:hotels) 酒店h =(酒店)obj h.getStarRating()//某些方法绑定到Hotel而不是DataObject
您也可以使用
if (obj is instanceof Hotel)
// do something
或
obj.getClass().getName()
但这些方法输出取决于您在DataObject
getAll()
的方式