클래스간의 값 전달 문제입니다.

sadrove의 이미지

자바에서...
클래스 A,B,C가 있습니다..
A클래스에서 B,C에 대한 객체를 생성합니다..
여기서 B객체안에 name이란 변수가 있는데...
C객체에서 어떠한 이벤트가 발생할때마다 B객체안의 name이란 변수의 값을 변경해주어야 합니다..
이걸 어떻게 하면 구현할 수 있을까요..?
물론 C객체에서 new B 해서 새로 객체를 생성해서는 안됩니다..
처음에 A가 생성한 B객체안의 name변수값을 변경해야 한다는 것입니다.

전 A클래스에 setBName(String) 같은걸 만들어서...
C에서 이벤트가 발생할때마다 super.setBName(String) 하려고 했는데..
super 클래스가 A가 아닌가 봅니다...흐...

어떻게 하면 C에서 B의 변수를 조작할 수 있을까요..?
도움 부탁드립니다...^^

ssehoony의 이미지

자바라.. 자바는 포인터가 없다고 알고 있는데..
레퍼런스는 있겠죠?

A에서 B를 생성한 다음 C를 생성할 때 B의 name 변수의 레퍼런스를 C에 넘겨줘서 C는 생성시에 받은 B의 name 변수 레퍼런스를 필요할 때 수정하면 되지 않을까요?

자바는 잘 모르지만 답변이 없어서, 혹시 도움이 될까 해서 올립니다.

yielding의 이미지

클래스 B, C의 생성자에 클래스A의 레퍼런스를 넘겨서 구현하는 방법이 있고 좀 더 깔끔한 방법은
Observer, Observable 패턴을 적용하면 될거 같습니다

Life rushes on, we are distracted

sadrove의 이미지

답변 주신분들 감사합니다..
레퍼런스를 넘기기로 했는데요..
한가지 문제가..

A에서 B와 C를 생성할 때...
C에게 A를 넘겨주려고 했는데..
C를 생성하는 부분이 A의 ActionPerformed 안에서 생성되거든요..
아래와 같이 했더니 this를 ActionListener로 인식하네요..

pubilc class A(){

         ----------생략----------

    myOpenItem.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            C = new C(this);
        }
    }
         ----------생략----------
}

this말고 뭐라고 써줘야 할까요..?
java를 처음 배우는지라...^^;;
부탁드립니다..
익명 사용자의 이미지

다른 문제가 걸리지 않는 다면 제일 심플한 방법은 B.name 을 static 으로 선언하면 될듯 합니다.

sadrove의 이미지

답변 감사드립니다..
우선 static으로 해결했는데..
뭔지 모르게 찜찜한 느낌이...^^;;

citywork의 이미지

sadrove wrote:

pubilc class A(){

         ----------생략----------

    myOpenItem.addActionListener(new ActionListener(){
        final A a = this;
        public void actionPerformed(ActionEvent ae){
            C = new C(a);
        }
    }
         ----------생략----------
}
this말고 뭐라고 써줘야 할까요..?
java를 처음 배우는지라...^^;;
부탁드립니다..

local/anonymous-class에서는 final 변수만 참조 할 수 있는걸로 알고 있습니다.
위와같이 코딩하시면 일단 원하시는데로 코딩할 수 있을거 같습니다.

fender의 이미지

sadrove wrote:
답변 주신분들 감사합니다..
레퍼런스를 넘기기로 했는데요..
한가지 문제가..

A에서 B와 C를 생성할 때...
C에게 A를 넘겨주려고 했는데..
C를 생성하는 부분이 A의 ActionPerformed 안에서 생성되거든요..
아래와 같이 했더니 this를 ActionListener로 인식하네요..

pubilc class A(){

         ----------생략----------

    myOpenItem.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent ae){
            C = new C(this);
        }
    }
         ----------생략----------
}

this말고 뭐라고 써줘야 할까요..?
java를 처음 배우는지라...^^;;
부탁드립니다..

A.this를 쓰세요

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

citywork의 이미지

fender wrote:

A.this를 쓰세요

몰랐는데, 좋은것 배워갑니다. :P

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.