powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вызвать super() в середине конструктора
11 сообщений из 11, страница 1 из 1
Вызвать super() в середине конструктора
    #38726122
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть сторонняя библиотека. В ней есть класс с одним единственным конструктором принимающим объект другого класса.
Код: java
1.
2.
3.
4.
interface iA { .... }
class B {
  public B(iA a) { ... }
}


У меня уже есть класс MyClass с интерфейсом iA. Хочу сделать наследника от B в котором жестко прописать использование MyClass.

В общем, что-то в духе:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class MyClass implements iA { ... }

class MyB extends B {
  MyClass a;
  public MyB() {
     a = new MyClass();
     super(a);
  }
}

Это не работает, потому что super должен быть первой строкой в конструкторе....
К сожалению B не имеет никаких set/get для iA объектов, их можно только задавать и только в конструкторе.

Вопрос: Как?
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38726157
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
super(new MyClass());
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38726161
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Код: java
1.
super(new MyClass());

Не подходит.
У класса B нету ни setChild(), ни getChild() методов. Ребенка можно задать ТОЛЬКО при создании. Но если создал, то уже фиг получишь ссылку на этого ребенка.
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38726170
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я честно говоря не совсем понял суть ограничений. Но думаю что запрет на наследование
это не такое уж и страшное ограничение. Можно использовать композицию.
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38726213
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlВопрос: Как?Сделать второй конструктор и с параметром?
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38726214
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovСделать второй конструктор и с параметром?
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38726277
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public class Test {

    static ThreadLocal<iA> cache = new ThreadLocal<iA>();
    
    static interface iA {}
    static class B {
        public B(iA a) {}
    }


    static class MyClass implements iA {}

    static class MyB extends B {
        private iA a;

        public MyB() {
            super(set(new MyClass()));
            synchronized (this){
                this.a = cache.get();
                cache.remove();
            }
        }

        private static iA set(MyClass a) {
            cache.set(a);
            return a;
        }
    }

}



Но, проще по-моему просто достать приватное поле из родителя через рефлексию.
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38726299
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovBasil A. SidorovСделать второй конструктор и с параметром?

А что не так?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
private MyB(MyClass a) {
     super(a);
     this.a = a;
  }

public MyB() {
     this(new MyClass());
  }



Вот за такие рудименты C++ в java да, хочется выражаться неприличными словами.
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38726457
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominА что не так?super(new A()) можно и без второго конструктора, но это не использовано. Вероятно потому, что требуется и вызов родительского конструктора и ссылка на объект, с которым этот конструктор вызван.
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38726463
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovsuper(new A()) можно и без второго конструктора, но это не использовано. Вероятно потому, что требуется и вызов родительского конструктора и ссылка на объект, с которым этот конструктор вызван.Что-то я туго соображаю.
Пора завязывать с отдыхом
...
Рейтинг: 0 / 0
Вызвать super() в середине конструктора
    #38727178
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominBasil A. Sidorovпропущено...


А что не так?

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
private MyB(MyClass a) {
     super(a);
     this.a = a;
  }

public MyB() {
     this(new MyClass());
  }



Вот за такие рудименты C++ в java да, хочется выражаться неприличными словами. О! Вполне пойдет. Спасибо.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вызвать super() в середине конструктора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]