gpt4 book ai didi

java - java中的泛型方法可以限制可接受的类型吗?

转载 作者:行者123 更新时间:2023-11-30 06:00:48 26 4
gpt4 key购买 nike

我有类似的要求this question 。我想泛化一个方法,但限制泛型参数可接受的类型。目前我所做的就是尝试在方法中转换为可接受的类型,但如果处理超过 2 或 3 种类型,似乎很麻烦。

编辑:
这些类型可能不属于同一基类。很抱歉没有早点提到这一点。

最佳答案

为此,您必须有一个基类才能执行此操作。

public class Person {
String name;
List<Profession> professions;
int age;
}

public class Doctor {
String university;
Boolean doctorate;
public void work() {
// do work
}
}

public class Teacher {
List<Grade> grades;
float salary;
public void work() {
// do work
}
}

public class Animal<T> {
T type;
}

所以,现在如果你想编写一个通用且适用于所有人的方法,你可以这样做,

public void doSomething(Animal<T extends Person> human) {
human.work();
}

如果该类不是 Person 类型,则会显示编译错误。

UPD1:
在这种情况下,所有类都没有共同的基类。有一些功能使它们独一无二。由此,我们可以认为它们具有共同的功能,我们可以而且应该使用接口(interface)添加该功能。

让我们看一些代码,

public class Human implements Growable {
public void grow() {
// human grow code
}
}

public class Plant implements Growable {
public void grow() {
// plant grow code
}
}

public class Table {
// does not grows
}

public class GrowService {
public static void grow(Growable growable) {
growable.grow();
}
}

interface Growable {
public void grow();
}

通过调用下面的方法,我们可以实现这一点

// Works fine
GrowingService.grow(new Plant());
// throws compilation error
GrowingService.grow(new Table());

关于java - java中的泛型方法可以限制可接受的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52307715/

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