0

コンストラクターを使用してこの問題を解決しようとしています。この問題により、メソッドの重複エラーが発生します。

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;

import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
import com.google.android.maps.Projection;


public class MapRouteOverlay extends Overlay {
private GeoPoint gp1;
private GeoPoint gp2;

private int mode=0;
private int defaultColor;

public MapRouteOverlay(GeoPoint gp1, GeoPoint gp2, int mode) { 
    this.gp1 = gp1;
    this.gp2 = gp2;
    this.mode = mode;
    defaultColor = 999;
}

public MapRouteOverlay(GeoPoint gp1, GeoPoint gp2, int defaultColor) { 
    this.gp1 = gp1;
    this.gp2 = gp2;
    this.mode = mode;
    this.defaultColor = defaultColor;
}

public int getMode() { 
    return mode;
}

public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) { 
    Projection projection = mapView.getProjection(); 
    if (shadow == false) { 
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        Point point = new Point();
        projection.toPixels(gp1, point);

        if (mode==2) {
            if(defaultColor == 999)
                paint.setColor(Color.RED);
            else 
                paint.setColor(defaultColor);
            Point point2 = new Point();
            projection.toPixels(gp2, point2);
            paint.setStrokeWidth(5);
            paint.setAlpha(120);
            canvas.drawLine(point.x, point.y, point2.x, point2.y, paint);
        }
    }
    return super.draw(canvas, mapView, shadow, when);
}
}

私が得ているエラーはこれです:タイプMapRouteOverlayの重複メソッドMapRouteOverlay(GeoPoint、GeoPoint、int)

それらをコンストラクターにしてほしい。これを修正して機能させるにはどうすればよいですか?どんな助けでもいただければ幸いです!

4

1 に答える 1

0

オーバーロードルールを満たさない。

public MapRouteOverlay(GeoPoint gp1, GeoPoint gp2, int mode) { 

同じ数とタイプの引数を持つ重複したコンストラクターがあります。

javaでのメソッドオーバーロードのルール(コンストラクターにも適用されます):

  1. 異なる引数リストが必要です。
  2. さまざまな例外をスローする可能性があります
  3. 異なるリターンタイプを持つ可能性があります(メソッドのオーバーロードの場合)

次のようにコンストラクタ署名の1つを変更する必要があります。

public MapRouteOverlay( int mode,GeoPoint gp1, GeoPoint gp2) { 
      this(gp1,gp2, mode); //if your super class does not have an no-args constructor,this must be the first line in an overloaded constructor, a call to this() or super();
      //rest of your code.
  }
于 2012-11-20T21:27:45.763 に答える