Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将父类型类强制转换为self类_Java_Android - Fatal编程技术网

Java 如何将父类型类强制转换为self类

Java 如何将父类型类强制转换为self类,java,android,Java,Android,我有一些特定的类,比如Car,Home adapter,它们都扩展到adapter类,我将它们的实例传递给setAdapterForList方法,但是,所有的类都有自己的特殊方法,比如buyCar,getHome 我想做的是,通过在setAdapterForList方法中获取它们的类型,将这些适配器强制转换为它们的类 listView.setAdapterForList(new CarAdapter(13)); 这就是我想做的 public void setAdapterForList(Ada

我有一些特定的类,比如Car,Home adapter,它们都扩展到adapter类,我将它们的实例传递给setAdapterForList方法,但是,所有的类都有自己的特殊方法,比如buyCar,getHome

我想做的是,通过在
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,例如,我将转换到该变量。