gpt4 book ai didi

java - 如何从java中的方法返回泛型类型

转载 作者:行者123 更新时间:2023-12-01 15:17:25 25 4
gpt4 key购买 nike

我是泛型新手。这是我的类(class)。

public interface Animal {    
void eat();
}

public class Dog implements Animal {
public void eat() {
System.out.println("Dog eats biscuits");
}
}

public class Cat implements Animal {
public void eat() {
System.out.println("Cat drinks milk");
}
}

现在我希望以通用方式使用这些类。

public class GenericExample {

public <T extends Animal> T method1() {
//I want to return anything that extends Animal from this method
//using generics, how can I do that
}

public <T extends Animal> T method2(T animal) {
//I want to return anything that extends Animal from this method
//using generics, how can I do that
}

public static void main(String[] args) {
Dog dog = method1(); //Returns a Dog
Cat cat = method2(new Cat()); //Returns a Cat
}
}

如何从方法“method1”和“method2”返回泛型类型(可能是 Cat 或 Dog)。我有几个返回“T extends Animal”的此类方法,因此最好在方法级别或类级别声明泛型类型。

最佳答案

您不能让一个方法返回泛型类型,并且期望能够在不进行强制转换的情况下在该方法的调用者中访问该类型,除非可以从该方法的参数推导出该类型。因此 main 中的示例将不起作用。

因此,您要么不使用泛型,要么手动转换返回类型

public Animal method1()
Dog dog = (Dog)method1()

或者让该方法返回开始时的子类类型。

public Dog method1()
Dog dog = method1()

或者您可以使用泛型,并在调用方法时指定类型

public <T extends Animal> T method1()
Dog dog = <Dog>method1()

或者传递一些参数,从中可以推断出类型(第二个方法已经满足):

public <T extends Animal> T method1(Class<T> classOfreturnedType)
Dog dog = method1(Dog.class)

另外,如果 method1 本身是 static ,则只能从 static main 调用 method1

关于java - 如何从java中的方法返回泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11445626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com