реализация hashCode для одноэлементного класса - PullRequest
1 голос
/ 10 июля 2009

какая будет реализация для

public int hashCode()
{
}

метод в одном классе? Пожалуйста, предоставьте мне реализацию

Ответы [ 6 ]

11 голосов
/ 10 июля 2009

Поскольку существует только один объект, вам не нужно беспокоиться о том, чтобы другие равные объекты имели одинаковый hashCode. Таким образом, вы можете просто использовать System.identityHashCode (т.е. по умолчанию).

5 голосов
/ 10 июля 2009

Если это синглтон, вам не нужно указывать реализацию, так как это будет один и тот же экземпляр объекта, где бы он ни использовался. По умолчанию (System.identityHashCode (obj)) будет достаточно, или даже просто постоянное число (например, 5)

3 голосов
/ 10 июля 2009
public int hashCode() {
    return 42; // The Answer to the Ultimate Question of Life, The Universe and Everything
}
1 голос
/ 23 октября 2015
Objects of singleton class always return same hashcode. Please find below code snippet,

#Singleton class
public class StaticBlockSingleton {
    //Static instance
    private static StaticBlockSingleton instance;

    public int i;

    //Private constructor so that class can't be instantiated 
    private StaticBlockSingleton(){}

    //static block initialization for exception handling
    static {
        try{
            instance = new StaticBlockSingleton();
        }catch(Exception e){
            throw new RuntimeException("Exception occured in creating singleton instance");
        }
    }

    public static StaticBlockSingleton getInstance(){
        return instance;
    }

    public void printI(){
        System.out.println("------ " + i);
    }
}


#Singletone Client
public static void main(String[] arg) {
        System.out.println("From Main");
        StaticBlockSingleton s1  = StaticBlockSingleton.getInstance();
        s1.i = 100;
        System.out.println("S1 hashcode --- " + s1.hashCode());
        StaticBlockSingleton s2  = StaticBlockSingleton.getInstance();
        s2.i = 200;
        System.out.println("S2 hashcode --- " + s2.hashCode());
        s1.printI();
        s2.printI();
    }


#Output
From Main
S1 hashcode --- 1475686616
S2 hashcode --- 1475686616
------ 200
------ 200
1 голос
/ 10 июля 2009

Если вместо этого вы используете одноэлементный шаблон ENUM (Effective Java # ??), вы получите hashCode и равны бесплатно.

0 голосов
/ 10 июля 2009

Я не хочу повторять здесь другие ответы. Так что да, если вы используете синглтон, то ответ Мэтью - это то, что вы хотите. Убедитесь, что вы не путаете singleton только с неизменным объектом . Если у вас есть неизменяемый объект, вам придется реализовать метод hashCode ().

Помните, что существует только один экземпляр синглтона. Таким образом, по умолчанию достаточно hashCode.

public class ImmutableNotSingleton {
    private final int x;
    public ImmutableNotSingleton(int x) { this.x = x; }

    // Must implement hashCode() as you can have x = 4 for one object,
    // and x = 2 of another
    @Override public int hashCode() { return x; }
}

Если вы использовали неизменяемый, не забудьте переопределить equals (), если вы переопределяете hashCode ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...