以下示例来自GenericsFAQ:
class Pair<X,Y> {
private X first;
private Y second;
public Pair(X a1, Y a2) {
first = a1;
second = a2;
}
public X getFirst() { return first; }
public Y getSecond() { return second; }
public void setFirst(X arg) { first = arg; }
public void setSecond(Y arg) { second = arg; }
}
问题:我想强制执行X
,而Y
应该属于同一类型。示例Pair<Integer,Integer>
是正确的,但不应接受Pair<Integer, String>
。是否有可能通过泛型来实现这一目标?
答案 0 :(得分:11)
使用
class Pair<X> {
并将所有Y
更改为X
。
答案 1 :(得分:0)
你有没有考虑过这样的事情?
class LikePair<Z> extends Pair<Z,Z> {
public LikePair(Z a, Z b) {
super(a, b);
}
}
这样你就可以保留(可能非常有用的)Pair类,同时还需要强制执行你的“相似”约束。
作为编程风格的问题,我会使Pair(和LikePair)不可变(最终字段,没有setter)。实现equals(),hashCode(),toString()等等也很好。
答案 2 :(得分:-1)
是。这是仿制药的唯一目的;执行您自己的自定义实现。但是,我建议您使用Java的Map和HashMap,而不是使用自己的泛型进行配对。这样您就可以获得预期的结果和其他附加功能。 请查看以下文档:Java HashMap API
但是,如果您仍然认为您自己的泛型实现对于特定目的来说非常方便,那么您可以按照本教程进行操作:Generic Types (Java Tutorials)