我对this question有类似的要求。
我想泛化一种方法,但通过通用参数限制可接受的类型。目前,我正在尝试将方法转换为可接受的类型,但是如果要处理2种或3种以上的类型,则显得很麻烦。
编辑:
这些类型可能不是相同的基类。抱歉,我们之前没有提及。
答案 0 :(得分:1)
为此,您必须具有基类,以便您可以执行此操作。
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 :
在这种情况下,所有类都不具有公共基类。有一些使它们独特的功能。这样,我们可以认为它们具有共同的功能,我们可以并且应该使用界面来添加。
让我们看一些代码,
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());
答案 1 :(得分:0)
Java泛型允许使用基本的通配符,例如<T>
,但也可以使用更多的详细信息,例如
<T extends Number>
表示T是Number或其子类的任何类型T或
<T super Number>
,这意味着T可以一直是Number或Number直至Object为止的Number的任何超类。