Announcement

Collapse
No announcement yet.

Methoden zusammenfassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Methoden zusammenfassen

    Hallo und guten Mittag,

    ich habe eine Frage bezüglich zweier Methoden, die eigentlich das gleiche machen, bis auf eine Kleinigkeit, nämlich das panTo (Justieren der Karte).

    Die Anwendung beschreibt folgendes: Es geht um zwei Autos, die auf der gleichen Karte zu sehen sein sollen. Das eine Auto (mit der methode updatePosition) soll aber panTo(); mitbekommen. Ansonsten ist eigentlich alles gleich, auch die Marker. Bisher sehen die beiden Methoden so aus:

    Die Klasse heißt Maps.

    Code:
    private void updatePosition(double lat, double lon, double heading) {
    		latitude = lat;
    		longitude = lon;
    		mapWidget.panTo(LatLng.newInstance(lat, lon));
    		String icon = "ccp/P5.png";
    			markerOptions = MarkerOptions.newInstance(Icon
    					.newInstance("img/icons/" + icon));
    
    
    		mapWidget.removeOverlay(carMarker);
    		carMarker = new Marker(LatLng.newInstance(lat, lon), markerOptions);
    		mapWidget.addOverlay(carMarker);
    		updateGuidance(lat, lon);
    	}
    
    
    
    	private void updatePositionFollowed(double lat, double lon, double heading) {
    		double lati  = lat;
    		double longi = lon;
    
    		String icon = "ccp/P5.png";
    
    			markerOptions = MarkerOptions.newInstance(Icon
    					.newInstance("img/icons/" + icon));
    		mapWidget.removeOverlay(followedMarker);
    		followedMarker = new Marker(LatLng.newInstance(lati, longi), markerOptions);
    		mapWidget.addOverlay(followedMarker);
    		updateGuidance(lati, longi);
    	}

    So hab ich es dann versucht, bekomme aber die Fehlermeldung eines Syntaxerrors:

    Code:
    	private void setPan(double lat, double lon, double heading, Marker marker) {
    		mapWidget.panTo(LatLng.newInstance(lat, lon));
    		
    		private void updatePosition(double lat, double lon, double heading, Marker marker){
    			latitude = lat;
    			longitude = lon;
    		
    			String icon = "ccp/P5.png";
    	
    				markerOptions = MarkerOptions.newInstance(Icon
    						.newInstance("img/icons/" + icon));
    	
    	
    			mapWidget.removeOverlay(marker);
    			marker = new Marker(LatLng.newInstance(lat, lon), markerOptions);
    			mapWidget.addOverlay(marker);
    			updateGuidance(lat, lon);
    		}
    	}
    Funktioniert der Aufruf dann folgendermaßen?

    Code:
    Maps.this.updatePosition(new Double(lat), new Double(lon), 0,marker);
    ich hoffe ich hab nichts vergessen. Danke schon einmal!
    Zuletzt editiert von christin; 18.08.2010, 16:37.

  • #2
    Ich verstehe die Frage nicht, bzw. das was rauskommen soll
    Christian

    Comment


    • #3
      es geht mir einfach darum herauszufinden wie ich zwei Methoden, die gleich aussehen, bis auf eine minizeile
      Code:
      (	mapWidget.panTo(LatLng.newInstance(lat, lon));)
      zusammenfassen kann.
      Beantwortet das deine Frage oder hab ich dich jetzt noch mehr verwirrt?

      Comment


      • #4
        Dann musst du beim Aufruf der Methode an irgendwas erkennen, ob die Minizeile ausgeführt werden muss. Das ist dann derart

        if(Minizeile muss ausgeführt werden)
        {
        Minizeile
        }

        zu realisieren. Zur Not erhält die Methode einen weiteren Aufrufparameter true/false der anzeigt, ob die Zeile ausgeführt werden soll

        EDIT:

        Da die Minizeile am Anfang steht, könnte geprüft werden, ob sie in den Fällen wo es nötig ist schon VOR der Methode ausgeführt werden kann
        Zuletzt editiert von Christian Marquardt; 18.08.2010, 16:47.
        Christian

        Comment


        • #5
          hm, okay, ich frage anders. Kann ich an einer Stelle die äußere Methode aufrufen und anderer Stelle nur die Innere?
          Die Äußere wäre hier also die setPan(){} und die innere die updatePosition(){}.

          Denn für das eine Auto auf der Karte gilt die ganze Methode mit setPan und für das andere Auto will ich die Methode nur ohne setPan?

          Comment


          • #6
            Code:
            public void aussen()
                {
                 public void innen()
                    {
             
                    }
            }
            Es gibt keine "Äußere" und "Innere" Methoden. Da sollte deine IDE schon nicht mitspielen

            Denn für das eine Auto auf der Karte gilt die ganze Methode mit setPan und für das andere Auto will ich die Methode nur ohne setPan?
            Siehe Beitrag 4
            Christian

            Comment


            • #7
              oha. Man darf also keine Methode in eine Methode schreiben?
              ungeschickt...

              Dann halte ich mich mal an Beitrag 4. Danke!

              Comment


              • #8
                Was könnte daran ungeschickt sein?
                Christian

                Comment


                • #9
                  Ich als Bindestrich-Informatiker hab leider nur Java richtig gelernt. Mir fehlt also der Vergleich zu anderen Sprachen. In welcher Programmiersprache kann man denn Methoden in Methoden schreiben? Nur so interessehalber
                  http://www.winfonet.eu

                  Comment


                  • #10
                    @ngomo: In JavaScript

                    Das eigentliche Problem kann man lösen wie Christian es geschrieben hat, oder man übergibt anonyme Implementierungen eines Interface als Parameter oder in Java 7 mit Closures.

                    Code:
                    public void updatePosition(double lat, double lon, double heading, PanTo panTo) {
                    	panTo.panTo(lat, lon);
                    	// ...
                    }
                    
                    private interface PanTo {
                    	public void panTo(double lat, double lon);
                    }
                    Aufruf:

                    Code:
                    updatePosition(1, 1, 1, new PanTo() {
                    			public void panTo(double lat, double lon) {
                    				mapWidget.panTo(LatLng.newInstance(lat, lon));
                    			}
                    		});
                    oder

                    Code:
                    updatePosition(1, 1, 1, new PanTo() {
                    			public void panTo(double lat, double lon) {}
                    		});
                    Ob sich das hier lohnt ist fraglich, aber wenn man mehrere fast gleiche Methoden hat kann man das so machen.

                    Comment


                    • #11
                      Also ich bin jetzt nicht der Java Gott, aber die Lösung finde ich doch etwas seltsam

                      Mach doch einfach sowas:

                      [highlight=java]
                      private void UpdatePositionFollow(double lat, double lon, double heading, Marker marker) {

                      UpdatePosition(lat, lon, heading, marker);
                      mapWidget.panTo(LatLng.newInstance(lat, lon));
                      }

                      private void updatePosition(double lat, double lon, double heading, Marker marker){
                      latitude = lat;
                      longitude = lon;

                      String icon = "ccp/P5.png";

                      markerOptions = MarkerOptions.newInstance(Icon.newInstance("img/icons/" + icon));


                      mapWidget.removeOverlay(marker);
                      marker = new Marker(LatLng.newInstance(lat, lon), markerOptions);
                      mapWidget.addOverlay(marker);
                      updateGuidance(lat, lon);
                      }
                      [/highlight]

                      Comment


                      • #12
                        Das ist einfach eine Variante wie man vor Java 7 Closures simulieren kann.

                        Deine Variante ist zwar einfacher, aber er fragte ja wie man Methoden zusammenfassen kann, die sich minimal unterscheiden. So hat er ja wieder zwei verschiedene Methoden.

                        Comment


                        • #13
                          Ja klar da kommts natürlich auf den Anwendungsfall an. Find es spannend, dass man so ein Interface anonym implementieren kann. Müsst ich direkt mal nachsehen ob sowas in .NET auch funktioniert.

                          Comment


                          • #14
                            Grandios, es funktioniert!

                            Vielen Dank euch... das wird ein guter Tag.

                            Comment

                            Working...
                            X