当前位置: 首页 > 知识库问答 >
问题:

如何从同一方法返回父类和子类的泛型类型

钦枫
2023-03-14

这是我的场景,我有三节课。

class Animal {
   public getWeight(){ ..... }
   public getHeight(){ ..... }
}

class Dog extends Animal {
   public getDogType() { ...}
}

class Cat extends Animal {
   public getCatType(){....}
}
public Animal translate(CustomObject o){
     ... so many calculations here
}

这里translate方法返回动物对象,但我需要使用相同的方法返回狗和猫类型,而不需要进行类型转换。我知道我必须在这里使用泛型,但是我如何编辑translate方法来支持泛型,这样我就可以将类类型传递给它的参数,如果使用Cat参数调用它就返回Cat对象,如果使用动物参数调用它就返回动物对象,如果使用Dog参数调用它就返回Dog对象。

例如:-cat newCat=translate(object,cat.class);//应该返回cat对象而不是动物obj而不是

Cat newCat=(Cat)translate(object,Cat.class)

谢了。

共有1个答案

令狐弘益
2023-03-14

您需要一个自引用绑定:

class Animal<T extends Animal<T>> {
   public getWeight(){ ..... }
   public getHeight(){ ..... }
   public T translate(CustomObject o){
     //... so many calculations here
   }
}

class Dog extends Animal<Dog> {
   //
}

class Cat extends Animal<Cat> {
   //
}

您可以考虑将translate()抽象,允许子类处理它们自己的实现。

 类似资料:
  • 现在我希望以泛型的方式使用这些类。 如何从方法“method1”和“method2”返回泛型类型(可以是猫或狗)。我有几个返回“T extends Animal”的方法,所以最好在方法级别或类级别中声明泛型类型。

  • 问题内容: 背景 我曾经写过这种方法: 应该这样称呼它: 这很好用(尽管我在研究当前容易出错的问题时在这里的答案中已经看到)。 目前的情况 无论如何,现在我正在编写以下代码(在扩展javax.servlet.jsp.tagext.TagSupport的类中): 目的是可以这样称呼: 我的评估方法中的代码显然不起作用。的第二个参数应该是Class对象。这导致我: 我的问题 如何获得通用(返回)类型的

  • 我得到了ClassCastException。我正在遵循这个答案,但没有得到正确的答案。将对象转换为通用类型以返回 BubbleSort.java MainPorgram.java 安慰 线程“main”Java . lang . classcastexception中出现异常:无法转换[ljava . lang . object;to [I at java.lang.Class.cast(未知来

  • 我正在实现我自己的泛型链表类,它有一个名为的实例方法,该方法生成链表的数组副本并返回它。然而,每当我试图在实例上调用该方法时,我总是得到错误消息“sllist.this cannot be referenced from a static context”。我搜索了一下,有些人说这是因为我没有在实例上调用那个方法,但我确实调用了。 下面是类: 它有一些方法,如,它们都没有问题。 是我不断收到错误消

  • 我正在修改open JDK以添加特性,我已经遇到了两次,但没有好的解决方案。

  • 类具有类似类型的方法(让我们称其为收集器)。我认为这些方法可以通过使其返回一个包装泛型值的类来实现。 这是示例代码 此代码产生错误 我知道我可以通过使用泛型值创建收集器类来解决这个问题。我希望Collector类是单例的,我是指bean。所以我不能这么做。 有办法吗?