考虑此示例
public interface Equatable<T> {
public boolean equal(T t1, T t2);
}
public class Square implements Equatable<Square> {
public boolean equal(Square t1, Square t2) {
return false;
}
}
Equatable接口是否有可能强制Square来实现一个相等的函数,该函数接受两个Square,而不仅仅是两个任意的Square(两个String等)?
答案 0 :(得分:1)
是的,您没有在界面中定义“ T”,您只能将其限制为实现Equatable的类,因此将不允许使用 String :
public interface Equatable<T extends Equatable<T>>
{
//...
}
做得好:
public class Square implements Equatable<Square>
{
public boolean equal(Square t1, Square t2)
{
return false;
}
}
编译错误:
public class Circle implements Equatable<String>
{
public boolean equal(String t1, String t2)
{
return false;
}
}
注意
请注意,将相同的Type名称放在方括号中是您的责任,因为下面的情况不会被编译器覆盖。
我想您想禁止对其他类型使用 等于 方法。
public class Square implements Equatable<Circle>
{
public boolean equal(Circle t1, Circle t2)
{
return false;
}
}
答案 1 :(得分:0)
您可以在某种程度上使用递归泛型类型来强制执行此操作。
public interface Equatable<T extends Equatable<T>> {
public boolean equal(T t1, T t2);
}