capitan Δημοσ. 15 Ιουλίου 2008 Δημοσ. 15 Ιουλίου 2008 Καλησπέρα! Έχω μια απορία στην Java. Μπορούμε να δημιουργήσουμε 2 μεταβλητές οι οποίες να είναι "συγχρονισμένες"? Δηλαδή όταν αλλάζουμε την μία, αυτομάτως και χωρίς εντολή εκχώρησης ή δική μας παρέμβαση, ν' αλλάζει και η άλλη? Και τώρα που το θυμήθηκα, μήπως ξέρετε κάποιο free GUI designer σε plugin για το Eclipse? Ευχαριστώ
Ros_Original Δημοσ. 16 Ιουλίου 2008 Δημοσ. 16 Ιουλίου 2008 Για Visual Editor κοίτα εδώ: http://download.eclipse.org/tools/ve/downloads/index.php Για το άλλο που λες δεν μπορείς να MHN κάνεις εκχώρηση τιμής. Το προφανές είναι ότι αν αυτές σχετίζονται τότε αυτό θα γίνει αυτόματα. Διαφορετικά κάπου θα πρέπει να γράψεις τον κώδικα που θα το κάνει. Για παράδειγμα για να το κάνεις αυτό στην C θα έπρεπε να κάνεις mprotect το συγκεκριμένο κομμάτι μνήμης και να γράψεις τον δικό σου trap handler, ο οποίος θα καλείται και θα κάνει αυτό που θέλεις. Σε Java δεν παίζει κάτι τέτοιο...
alex2005 Δημοσ. 16 Ιουλίου 2008 Δημοσ. 16 Ιουλίου 2008 Όταν λες μεταβλητές εννοείς primitive data types ή Objects? Γιατί με Object μπορείς να έχεις δύο διαφορετικές μεταβλητές οι οποίες έχουν reference για το ίδιο object στην μνήμη. Εναλλακτικά, αν το θέλεις για primitive types(int,float,double κτλ) μπορείς να χρησιμοποιήσεις το αντίστοιχο wrapper object ( int - Integer,float - Float,double - Double κτλ)
i.cherouvim Δημοσ. 16 Ιουλίου 2008 Δημοσ. 16 Ιουλίου 2008 Γίνεται με AOP αλλά και με libraries όπως ASM και cglib, αλλά σίγουρα δεν θες να ασχοληθείς με αυτά και μάλλον κάτι έχεις σκεφτεί λάθος. Προγραμματιστικά γίνεται με δικά σου objects με πολλούς τρόπους: >Foo f = new Foo(); Bar b = new Bar(); f.join(; f.setValue("lol"); assertEquals("lol", b.getValue()); Πες μας τι θες να κάνεις. Τι πρόβλημα πας να λύσεις.
capitan Δημοσ. 16 Ιουλίου 2008 Μέλος Δημοσ. 16 Ιουλίου 2008 Μάλλον το έλυσα το πρόβλημα μου παιδιά, δεν είχα σκεφτεί επαρκώς πως έπρεπε να δουλεύει. Τώρα από περιέργια περισσότερο... @alex2005: Όταν λες 2 Object μοπρούν να έχουν reference το ίδιο Object στη μνήμη πως το κάνεις? Πχ έχεις >Object1 a = new Object1(); Object1 b = new Object1(); a=b; b.feature1=2; το a.feature1 όμως δεν έχει αλλάξει. Μόνο με χρήση pointers μπορώ να το φανταστώ, έτσι ώστε το b να είναι pointer στο a. @i.cherouvim: O κώδικας που παρέθεσες θα δουλέψει και για την πάνω περίπτωση των a και b? H join δηλαδή θα "συγχρονίσει" τα 2 Objects? Την υλοποιούν οι Foo κ Βοο (γιατί δεν την βρήκα στο API)?
skiabox Δημοσ. 16 Ιουλίου 2008 Δημοσ. 16 Ιουλίου 2008 Καλησπέρα! Έχω μια απορία στην Java. Μπορούμε να δημιουργήσουμε 2 μεταβλητές οι οποίες να είναι "συγχρονισμένες"? Δηλαδή όταν αλλάζουμε την μία, αυτομάτως και χωρίς εντολή εκχώρησης ή δική μας παρέμβαση, ν' αλλάζει και η άλλη? Και τώρα που το θυμήθηκα, μήπως ξέρετε κάποιο free GUI designer σε plugin για το Eclipse? Ευχαριστώ Αυτο εδω θες αλλα δεν ειναι free! http://www.jetbrains.com/idea/features/gui_builder.html
alex2005 Δημοσ. 16 Ιουλίου 2008 Δημοσ. 16 Ιουλίου 2008 Μάλλον το έλυσα το πρόβλημα μου παιδιά, δεν είχα σκεφτεί επαρκώς πως έπρεπε να δουλεύει. Τώρα από περιέργια περισσότερο... @alex2005: Όταν λες 2 Object μοπρούν να έχουν reference το ίδιο Object στη μνήμη πως το κάνεις? Πχ έχεις >Object1 a = new Object1(); Object1 b = new Object1(); a=b; b.feature1=2; το a.feature1 όμως δεν έχει αλλάξει. Μόνο με χρήση pointers μπορώ να το φανταστώ, έτσι ώστε το b να είναι pointer στο a. @i.cherouvim: O κώδικας που παρέθεσες θα δουλέψει και για την πάνω περίπτωση των a και b? H join δηλαδή θα "συγχρονίσει" τα 2 Objects? Την υλοποιούν οι Foo κ Βοο (γιατί δεν την βρήκα στο API)? Όταν δουλεύεις με αντικείμενα στην Java πάντα παίρνεις έναν pointer. Δηλαδή : Object a = new Object(); (η μεταβλητή a είναι pointer) Επειδή έχω να προλάβω ένα αεροπλάνο τώρα θα επανέλθω αύριο να δω αν μπορώ να σου ποστάρω έναν κώδικα....
skiabox Δημοσ. 16 Ιουλίου 2008 Δημοσ. 16 Ιουλίου 2008 Ενα object μπορει να εχει 500 references πανω του.Αρκει αυτα τα references να εχουν δηλωθει πιο πριν.Μπορεις και να δηλωσεις ενα reference χωρις αναγκαστικα να δημιουργησεις object. Αν ομως δημιουργησεις και αντικειμενο και μετα κολησεις το reference σε καποιο αλλο αντικειμενο το ορφανο αντικειμενο γινεται collected απο τον garbage collector.
capitan Δημοσ. 16 Ιουλίου 2008 Μέλος Δημοσ. 16 Ιουλίου 2008 Όταν δουλεύεις με αντικείμενα στην Java πάντα παίρνεις έναν pointer.Δηλαδή : Object a = new Object(); (η μεταβλητή a είναι pointer) ναι αλλά τα a και b υποθέτω ότι δείχνουν διαφορετικές θέσεις μνήμης γιατί εάν η εντολή a=b σήμαινε "κάνε το a να δείχνει στο b" τότε οποιαδήποτε αλλαγή στο b στη συνέχεια (πχ b.feature1++ ) θα σήμαινε αυτομάτως και αλλαγή του αντίστοιχου feature του a κάτι το οποίο δε συμβαίνει, σωστά? Επομένως συμπεραίνω ότι τα a και b δείχνουν θέσεις μνήμης (είναι pointers) μεν, διαφορετικές δε, αφού η new μας έδωσε χώρο σε διαφορετικό μέρος και ότι η εντολή a=b κάνει ουσιαστικά αντιγραφή περιεχομένου και όχι διεύθυνσης. Γενικά εγώ κολλάω στο πως 2 διαφορετικές μεταβλητές Object μπορούν ουσιαστικά να δείχνουν στο ίδιο αντικείμενο σε μία θέση μνήμης, έτσι ώστε είτε a.feature++ πούμε, είτε b.feature++ πούμε, να αλλάζει το feature του αντικειμένου.
Red_Phantom Δημοσ. 16 Ιουλίου 2008 Δημοσ. 16 Ιουλίου 2008 > package javaapplication1; class MyClass { public int x; } public class Main { public static void main(String[] args) { MyClass a=new MyClass(); a.x=10; MyClass b=a; MyClass c=b; b.x++; System.out.println(b.x+" "+a.x+" "+c.x); } }
ippo00 Δημοσ. 16 Ιουλίου 2008 Δημοσ. 16 Ιουλίου 2008 > public class InsTest { public static void main(String [] args) { a = new TestObject(3); b= new TestObject(5); System.out.println(a.toString()); System.out.println(b.toString()); System.out.println(a.getVal()); System.out.println(b.getVal()); a=b; System.out.println(a.toString()); System.out.println(b.toString()); System.out.println(a.getVal()); System.out.println(b.getVal()); b.setVal(7); System.out.println(a.getVal()); System.out.println(b.getVal()); } private static TestObject a,b; } > public class TestObject { TestObject(int g) { this.z = g; } public int getVal() { return this.z; } public void setVal(int j) { this.z = j; } private int z; } Output > TestObject@9304b1 TestObject@190d11 3 5 TestObject@190d11 TestObject@190d11 5 5 7 7 οπότε αυτό που καταλαβαίνω ότι λες είναι λάθος
capitan Δημοσ. 16 Ιουλίου 2008 Μέλος Δημοσ. 16 Ιουλίου 2008 Για Visual Editor κοίτα εδώ: http://download.eclipse.org/tools/ve/downloads/index.php Να σε ρωτήσω, το εγκατέστησα και δημιούργησα μια VisualClass αλλά δεν έχει κάπου να σχεδιάσεις...Η Pallete που σου έχει στα δεξιά είναι άδεια. Μήπως κάνω κάτι εγώ λάθος? Δοκίμασα και με άλλους τύπους εκτός της VisualClass αλλά τίποτα... Τώρα είδα τις απαντήσεις σας. Ναι όντως έχετε δίκιο, ευχαριστώ για τις απαντήσεις σας!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.