Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Доступ к объекту класса


Автор: axod 25.2.2005, 17:38
Наверно лёгкий вопрос
Есть такая примитивная прога
Код

import java.awt.*
import javax.swing.*;

public class MyClass extends JFrame{

public MyAnotherClass myAnotherClass;
private ClassUser classUser;

public MyClass(){

setSize(640, 480);


myAnotherClass = new MyAnotherClass();
classUser = new ClassUser();
}

public MyAnotherClass getObjectClass(){
 return myAnotherClass;
}

public static void main(String args[]){
MyClass();
}
}

class ClassUser{

public ClassUser(){
function();//здесь надо получить объект myAnotherClass из класса MyClass
}

public function(MyAnotherClass mac){
….
}

}

class MyAnotherClass{
….
}

Как получить объект myAnotherClass из класса MyClass в класс ClassUser .
Без использования конструктора(параметр – передаваемый объект на класс MyAnotherClass. Не подходит так как если я буду использовать класс ClassUser и его наследников в других классах, то придётся всё равно каким-то Макаром получить объект на класс MyAnotherClass)
В принцепе можно написать так :
Код

import java.awt.*
import javax.swing.*;

public class MyClass extends JFrame{

public static MyAnotherClass myAnotherClass;
private ClassUser classUser;

public MyClass(){

setSize(640, 480);


myAnotherClass = new MyAnotherClass();
classUser = new ClassUser();
}

public static MyAnotherClass getObjectClass(){
 return myAnotherClass;
}

public static void main(String args[]){
MyClass();
}
}

class ClassUser{

public ClassUser(){
function(MyClass.getObjectClass());//здесь надо получить объект myAnotherClass из класса MyClass
}

public function(MyAnotherClass mac){
….
}

}

class MyAnotherClass{
….
}

Ну а кроме этого способа так как статические функции требуют использования статических переменных, ну а это мне не по душе так как если у меня задействована функция GetObjectClass более обширно и там используются другие переменные, то их придётся делать статическими.

Автор: LSD 25.2.2005, 21:04
Код

public class MyClass extends JFrame
{
 public MyAnotherClass myAnotherClass;
 private ClassUser classUser;

 public MyClass()
 {
   …
   myAnotherClass = new MyAnotherClass();
   classUser = new ClassUser();
   …
 }


 class ClassUser
 {
   public MyAnotherClass getMyAnotherClass()
   {
     return MyClass.this.myAnotherClass;
   }
 }

 class MyAnotherClass
 {
   public ClassUser getClassUser()
   {
     return MyClass.this.classUser;
   }
 }
}

Автор: axod 25.2.2005, 22:40
Спасибо конечно работает.
Но это работает в том случае если классы MyAnotherClass и ClassUser объявлены внутри
нашего главного класса MyClass
Ну а всё таки для случая если MyAnotherClass и ClassUser объявлены вне(к примеру в разных java файлах) можно ли получить объект?

Автор: LSD 25.2.2005, 23:49
Как я понял задачу:
  • есть базовый класс MyClass
  • есть два вспомогательных ClassUser и MyAnotherClass
  • из одного вспомогательного надо получит ссылку на другой
Мне непонятно как логически связанны между собой экземпляры ClassUser и MyAnotherClass, какой экземпляр с каким должен взаимодействовать?

Автор: igon 26.2.2005, 04:54
А так не сработает?

Код

import java.awt.*
import javax.swing.*;

public class MyClass extends JFrame
 {
   public MyAnotherClass myAnotherClass;

   classUser = new ClassUser(this);
 }

class ClassUser
 {
   MyClass myClassReference;
...
   public ClassUser(MyClass mc)
     {
       myClassReference = mc;
     }

   void someThing()
     {
       myClassReference.myAnotherClass.someMethod();//экземпляр  myAnotherClass доступен
...
     }

Автор: axod 26.2.2005, 14:00
2 iqon
Ну с помощью конструктора либо статики я знаю.
Но всё равно спасибо.

LSD
Тут всё ясно класс MyAnotherClass - несёт в себе некую информацию в нём много данных.
Создавая объект на этот класс в самом "главном"(пользовательском) классе мы вызываем его конструктор(MyAnotherClass() создавая объект) и может ещё ряд функций этого класса для определённых изменений этих данных.
Надеюсь пока всё понятно.
Класс ClassUser класс по какой-то обработке наших данных(к примеру он определяет действие нажатия кнопки мыши и чё-то ещё) но для него нужен объект на класс MyAnotherClass чтоб в зависимости от данных этого объекта он создаёт определённый обработчик для мыши.

Если я создам объект на класс MyAnotherClass ВНУТРИ класса ClassUser то данные придётся инициализировать внутри ClassUser, ладненько ну а если данные этого класса будут необходимы для других классов для обработки ТО мы столкнёмся опять же стой проблемой что я и спрашиваю.

Опять же как получить объект с данными из одного класса в другом, только без статики и конструктора, если такое возможно.

MyClass - базовый с инициализацией ВСЕГО
MyAnotherClass - класс с данными и их обработке
ClassUser - класс по некой обработке данных класса MyAnotherClass
(Кстати к примеру!!! У нас есть класс-JPanel в котором шось рисуется в MyClass, ну а в ClassUser по КАКИМ-ТО данным мы смотрим какой MouseAdapter подключить для обработки мыши для этого JPanel из класса MyClass)
Ну как smile ?

Автор: Domestic Cat 26.2.2005, 20:52
Посмотри паттерн Mediator.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)