Как переопределить метод equals в классе non-attribute generi c? - PullRequest
0 голосов
/ 08 марта 2020

У меня есть класс generi c, у которого нет атрибутов, но есть метод с типом generi c. Как я могу переопределить метод 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, чтобы отразить это? Или плохо писать такой класс?

1 Ответ

1 голос
/ 08 марта 2020

Мне кажется, что если нет атрибутов (которые я имею в виду instance полей), то, вероятно, класс не должен быть способен к созданию экземпляра, а методы должны быть объявлены static (например, * 1003). * в Java API). В любом случае я не верю, что вам нужно будет переопределять 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;
}
...