Java 如何将父类型类强制转换为self类
我有一些特定的类,比如Car,Home adapter,它们都扩展到adapter类,我将它们的实例传递给setAdapterForList方法,但是,所有的类都有自己的特殊方法,比如buyCar,getHome 我想做的是,通过在Java 如何将父类型类强制转换为self类,java,android,Java,Android,我有一些特定的类,比如Car,Home adapter,它们都扩展到adapter类,我将它们的实例传递给setAdapterForList方法,但是,所有的类都有自己的特殊方法,比如buyCar,getHome 我想做的是,通过在setAdapterForList方法中获取它们的类型,将这些适配器强制转换为它们的类 listView.setAdapterForList(new CarAdapter(13)); 这就是我想做的 public void setAdapterForList(Ada
setAdapterForList
方法中获取它们的类型,将这些适配器强制转换为它们的类
listView.setAdapterForList(new CarAdapter(13));
这就是我想做的
public void setAdapterForList(Adapter adapter) {
// some how get their type from adapter, Eg. CarAdapter
// and cast CarAdapter to it
Type type = adapter.getType();
Type typedAdapter = (type) adapter;
typedAdapter.buyCar()
setAdapter(adapter);
}
您可以使用
instanceof
检查它是一个还是另一个
public void setAdapterForList(Adapter adapter) {
if (adapter instanceof Car) {
Car c = (Car)adapter;
// stuff
return;
}
if (adapter instanceof Home) {
Home h = (Home)adapter;
// stuff
return;
}
// and so on...
}
我不知道这是否能自动完成。 但您可以手动执行以下操作:
CarAdapter carAd;
if (adapter instanceOf CarAdapter){
carAd = (CarAdapter) adapter;
}
旁注:如果一个方法被称为“setAdapterForList”,那么你究竟为什么要在其中调用像buyCar()这样的方法呢?向列表中添加内容不应有任何其他副作用。。。关于你的问题本身:只有两种选择。要么你做一些令人沮丧的事情(通常是设计不好的味道);或者你使用多态性。@Jägermeister我如何使用多态性呢?好吧,忘记使用不同名称的方法。相反,您在(可能是抽象的)基类上放置了一些“doTheThing()”;所有子类都可以为doTheThing()提供不同的实现。但是在开始做OO设计之前,你应该读一些关于OO设计的书籍和教程。@Jägermeister Adapter是android中的一个原生类,我必须扩展Adapter类,我知道你在说什么,我知道怎么做,我正试图找到一种聪明的方法来做,如果你知道我的意思,我不想使用instanceof,我想在运行中强制转换,因为可能有5个或更多适配器,难道我不能用一个方法获取类型并在没有if-else块的情况下强制转换到它吗?现实不是关于你想要什么,而是关于什么是可能的。您不能在运行时强制转换(当然,您可以,但是在运行时要为ClassCastException做好准备)如果我可以,那么,也许,您可以告诉我如何执行:)我不想使用instanceof,我想在运行时强制转换,因为可能有5个或更多适配器,我不能用一个方法获取类型,然后在没有if-else块的情况下将其强制转换为它吗?那么“getType()”应该返回什么?关键是,当您想调用特定于类的方法时,编译器需要知道特定的类。@Jägermeister Opps!!是的,你是对的。我的错。感谢catch.getType应该返回CarAdapter,例如,我将转换到该变量。