如何覆盖非属性泛型 class 中的 equals 方法?
How to override equals method in a non-attributes generic class?
我有一个泛型 class,它没有属性,但有一个泛型类型的方法。如何覆盖它的 equals 方法?
public Foo<T> {
boolean method(T bar){
if (bar instanceOf Boolean) // do something and return
if (bar instanceOf String) // do something and return
return false;
}
}
并且直观的 Foo<String> s
和 Foo<Boolean> b
应该是不同的,那么我如何覆盖 equals 来反映这一点呢?还是这样写一个class不好?
在我看来,如果没有属性(我认为是指 instance
字段),那么 class 可能无法被实例化,并且应该声明方法static
(就像 Java API 中的 Math class
)。无论如何,我认为您不需要覆盖 equals,因为您似乎不太可能比较多个实例。您可以按如下方式执行示例方法:
public static <T> boolean method(T foo) {
if (foo instanceof String) {
System.out.println("You passed a string");
return true;
}
if (foo instanceof Integer) {
System.out.println("You passed an integer");
return true;
}
return false;
}
但是如果你真的想覆盖 equals,你可以这样做。
@Override
public boolean equals(Object o) {
return this == o;
}
我有一个泛型 class,它没有属性,但有一个泛型类型的方法。如何覆盖它的 equals 方法?
public Foo<T> {
boolean method(T bar){
if (bar instanceOf Boolean) // do something and return
if (bar instanceOf String) // do something and return
return false;
}
}
并且直观的 Foo<String> s
和 Foo<Boolean> b
应该是不同的,那么我如何覆盖 equals 来反映这一点呢?还是这样写一个class不好?
在我看来,如果没有属性(我认为是指 instance
字段),那么 class 可能无法被实例化,并且应该声明方法static
(就像 Java API 中的 Math class
)。无论如何,我认为您不需要覆盖 equals,因为您似乎不太可能比较多个实例。您可以按如下方式执行示例方法:
public static <T> boolean method(T foo) {
if (foo instanceof String) {
System.out.println("You passed a string");
return true;
}
if (foo instanceof Integer) {
System.out.println("You passed an integer");
return true;
}
return false;
}
但是如果你真的想覆盖 equals,你可以这样做。
@Override
public boolean equals(Object o) {
return this == o;
}