Вопрос:

Java - определить, является ли объект членом внутреннего класса?

java class inner-classes

35 просмотра

1 ответ

1375 Репутация автора

У меня есть следующий код

public class A {
    public class B {
    }

    public boolean wasCreatedFromMe(B obj) {
       // I want to implement this method
    }
}

public class Test {
    public static void main(String[] args) {
        A a1 = new A();
        A a2 = new A();
        B b1 = a1.new B();
        a1.wasCreatedFromMe(b1); // true
        a2.wasCreatedFromMe(b1); // false
    }
}

Я хотел бы реализовать вышеописанный метод, который определяет, был ли объект создан из thisэкземпляра Outer Class. Есть ли способ использовать instanceofили какой-то тип Class<>магии, чтобы сделать это?

Я не хочу делать ничего из следующего:

Используйте структуры данных

// inside class A
Set<B> childObjs = new HashSet<>();

public B() {
    childObjs.add(this);
}

Задать объект внутреннего класса

// inside class A
public boolean wasCreatedFromMe(B obj) {
    return obj.parent() == this;
}

class B {
    public A parent() {
        return A.this;
    }
}
Автор: Hatefiend Источник Размещён: 11.08.2019 06:17

Ответы (1)


0 плюса

745 Репутация автора

Вы можете добиться этого, сравнивая хеш-код. В Inner classметоде переопределения хеш-кода и возврата хеш-кода родителя или для обеспечения большей безопасности создайте отдельный метод и верните хеш-код родителя.

И тогда вы можете сравнить хэш-код следующим образом:

public class B {
    public int getParentHashCode() {
        return A.this.hashCode ();
    }
}

public boolean wasCreatedFromMe(B obj) {
    if(this.hashCode () == obj.getParentHashCode ()) {
        return true;
    }
    else
        return false;
} 

A a1 = new A();
A a2 = new A();
B b1 = a1.new B();
System.out.println (a1.wasCreatedFromMe (b1));  // true
System.out.println (a2.wasCreatedFromMe (b1));  // false

Возможно, это не будет подходящим решением, но все же лучше, чем тот, Setкоторый у вас есть в качестве альтернативы.

Автор: Govinda Sakhare Размещён: 11.08.2019 07:26
Вопросы из категории :
32x32