如何在非属性泛型类中重写equals方法?

问题描述 投票:0回答:1

我有一个没有属性的泛型类,但是具有泛型类型的方法。如何覆盖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> sFoo<Boolean> b应该不同,所以如何覆盖等式来反映这一点?还是写这样的课不好?

java generic-programming
1个回答
0
投票

在我看来,如果没有属性(我指的是instance字段),则该类可能无法实例化,并且应将方法声明为static(如Math class在Java API中)。无论如何,我都不认为您需要覆盖均等值,因为您似乎不可能比较多个实例。您可以按如下所示进行操作:

    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;
    }

但是,如果您确实想覆盖等于,则可以执行以下操作。

@Override
public boolean equals(Object o) {
   return this == o;
}
© www.soinside.com 2019 - 2024. All rights reserved.