Nifty Posted April 25, 2012 at 05:19 AM Share Posted April 25, 2012 at 05:19 AM Kann in der Java API die Klasse "Device" bitte als Public deklariert werden ? Es ist sonst ziemlich schwierig ein Funktion zu schrieben die mit den Ableitungen verallgemeinert klar kommt oder als rückgabewert hat. Danke. Quote Link to comment Share on other sites More sharing options...
AuronX Posted April 25, 2012 at 07:42 AM Share Posted April 25, 2012 at 07:42 AM Ist ja spannend... habe mir auf deinen Post hin die Java-API das erste mal angeschaut. Device ist ja selbst nicht public, wird aber in der public Methode einer public Klasse als Parameter verwendet (IPConnection.addDevice()), ist also am Ende schon irgendwie "sichtbar". In der DotNet-Welt (also z.B. C#) würde das zu einem Compile-Fehler führen, weil da nichts nach außen sichtbar sein darf, was nicht selbst auch als public deklariert ist. Das macht auch Sinn ^^ Insofern würde ich dir rechtgeben, das Device gehört public. Quote Link to comment Share on other sites More sharing options...
Nifty Posted April 25, 2012 at 07:52 AM Author Share Posted April 25, 2012 at 07:52 AM Ja, der Compiler verhält sich da nicht konsistent. Quote Link to comment Share on other sites More sharing options...
photron Posted April 25, 2012 at 02:21 PM Share Posted April 25, 2012 at 02:21 PM Das Device nicht public ist aber als Parameter in addDevice verwendet wird ist richtig und es ist ganz normal und erwartet dass das so in Java funktioniert. Das funktioniert da Device package Visibility hat und daher können alle Brick und Bricklet Klassen im com.tinkerforge Package davon erben. Die Brick und Bricklet Klassen selbst sind public und Objekte davon können daher an addDevice übergeben werden. Aber es spricht nichts dagegen Device public zu machen. Allerdings kann man nur einen public Klasse pro .java Datei haben. Eine mögliche Lösung wäre die Device Klasse in eine Device.java auszulagern. Aber eigentlich wollen wir die IPConnection (und dazu gehört das Device) in einer Datei haben. Was ich aber recht einfach tun kann ist die Device Klasse als innere Klasse in IPConnection Klasse zu machen, so dass sie über IPConnection.Device public verfügbar ist. Quote Link to comment Share on other sites More sharing options...
Nifty Posted April 25, 2012 at 02:29 PM Author Share Posted April 25, 2012 at 02:29 PM Mit der Lösung könnte ich gut leben, Danke! Quote Link to comment Share on other sites More sharing options...
AuronX Posted April 25, 2012 at 03:05 PM Share Posted April 25, 2012 at 03:05 PM Dass es in Java geht habe ich ja nicht bestritten, dennoch finde ich die andere Lösung schöner. Im übrigen wäre mE eine eigene Datei mit public Device sinnvoller als das Device in der IPConnection. Das Device in der IPConn ist ja eher ein Hack, weil Java die Klassen<->Datei-Beziehung enforced. P.S.: Im übrigen hab ich mich sogar zunächst gewundert, wo denn das Device steckt, da es keine Device.java gab Quote Link to comment Share on other sites More sharing options...
photron Posted April 26, 2012 at 01:07 PM Share Posted April 26, 2012 at 01:07 PM AuronX, ich gebe dir recht und habe die Device Klasse in eine eigene Datei verschoben. Die nächste Release der Java Bindings wird dann eine public Device Klasse haben. Quote Link to comment Share on other sites More sharing options...
Nifty Posted April 26, 2012 at 08:39 PM Author Share Posted April 26, 2012 at 08:39 PM Fein. Schön das Du die saubere Lösung gewählt hast. Quote Link to comment Share on other sites More sharing options...
photron Posted May 9, 2012 at 04:28 PM Share Posted May 9, 2012 at 04:28 PM In Java Bindings Version 1.0.6 ist die Device Klasse jetzt public und abstract. Quote Link to comment Share on other sites More sharing options...
Nifty Posted May 9, 2012 at 05:15 PM Author Share Posted May 9, 2012 at 05:15 PM Fein - danke sehr. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.