0

以下に示すように、コンストラクターとして次のコードがあります。しかし、別の名前で複製したい。しかし、これでエラーが発生します。要件に合わせて何らかの変更を加えることはできますか?

これは元のコードです:

public HeyStatus(byte[] bytes)
    {
        this();

        int offset = 7;
        for (int i = 1; i < 9; ++i)
        {
            partition1Status[i-1].status = (bytes[offset + i] & 0x0F);
            partition2Status[i-1].status = (bytes[offset + i + 9] & 0x0F);
        }

        if( (bytes[offset + 9] == 0) || (bytes[offset + 9] == 1)){
            isPartitioned = (bytes[offset + 9] == 0) ? false : true;
        }

        partition1Status.status = (bytes[offset + 18] - 0x30);
        partition2Status.status = (bytes[offset + 19] - 0x30);

        String model = "" + (char)bytes[1] + (char)bytes[2];
        if (model.equalsIgnoreCase("!A"))
            modelNum = "T32";
    }

前のコードの後に​​このコードを追加したい:

    public HeyStatus(byte[] bytes2)  <----the line I am getting error
    {
        this();

        int offset = 7;
        for (int i = 1; i < 9; ++i)
        {
            partition3Status[i-1].status = (bytes[offset + i] & 0x0F);
            partition4Status[i-1].status = (bytes[offset + i + 9] & 0x0F);
        }


        if( (bytes[offset + 9] == 0) || (bytes[offset + 9] == 1)){
            isPartitioned = (bytes[offset + 9] == 0) ? false : true;
        }

        partition3Status.status = (bytes[offset + 18] - 0x30);
        partition4Status.status = (bytes[offset + 19] - 0x30);

        String model = "" + (char)bytes[1] + (char)bytes[2];
        if (model.equalsIgnoreCase("!A"))
            modelNum = "T32";
    }
4

7 に答える 7

0

追加の (たとえば) int パラメーターを追加して、実行するコード ブロックを指定することにより、コンストラクターを 1 つだけ使用できます。このように、必要な 2 つのコード ブロックを含む 1 つのコンストラクターが作成されます。

public HeyStatus(byte[] bytes, int option){
switch (option){
case 1: {
//you can place here the code you used in the first constructor
break;
}
case 2:{
//you can place here the code you used in the second constructor
break;
}
default: break;
}

コンストラクターを呼び出すときは、パラメーター リストでオプションを指定します。乾杯!

于 2013-05-31T09:05:47.333 に答える
0

同じパラメーター数と型を持つ 2 つのコンストラクターが必要な場合は、static factory methodパターンを使用する必要があります。 オブジェクトを適切に構築する
public static HeyStatus constructFromArray1(byte[] bytes) {...}
andのようなメソッドを作成します (そのメソッドには適切な名前を付ける必要があり ます。私が提案した名前は使用しないでください) 。.
public static HeyStatus constructFromArray2(byte[] bytes) {...}

HeyStatus heyStatus = HeyStatus.constructFromArray1(bytes)
HeyStatus heyStatus = new HeyStatus(bytes)

于 2013-05-31T08:47:15.357 に答える
0
public HeyStatus(byte[] bytes)
public HeyStatus(byte[] bytes2)

どちらも同じ宣言です。byte[]コンストラクターをオーバーロードするには、parameter( ) の型を変更する必要があります。コンストラクターまたはメソッドのオーバーロードは、シグネチャの違いに基づいています。ここでは、パラメーター名を変更するだけで、両方のコンストラクター定義に同じ署名を使用していますが、これは無効です。

詳細については、 Javadocを参照してください。

Java プログラミング言語はメソッドのオーバーロードをサポートしており、Java は異なるメソッド シグネチャを持つメソッドを区別できます。これは、クラス内のメソッドが異なるパラメータ リストを持つ場合、同じ名前を持つことができることを意味します

于 2013-05-31T07:45:33.797 に答える
0

1 つのコンストラクターを使用するだけで、それを呼び出すときにパラメーター内に適切なバイト配列を配置するのは、簡単な例です。

byte[] bytesOne[]= new bytes[]{1,2,3};
byte[] bytesTwo[] =new bytes[]{4,5,6};

HeyStatus hStatusOne = new HeyStatus(bytesOne);
HeyStatus hStatusTwo = new HeyStatus(bytesTwo);

ただし、コンストラクターは 1 つだけです。

PS内でさらにコンストラクターパラメーターを使用する場合は、最初のパラメーターとはタイプ(名前ではなく)および/または数が異なる必要があります。オーバーロード コンストラクターをグーグルで検索すると、より多くの情報を取得できます。

編集:

partion1Status[] (およびその他) との違いに気付きました。partionStatus をパラメーターに入れます。

たとえば、コンストラクターの頭は次のようになります。

 public HeyStatus(byte[] bytes, typeOfpartionStatus partitionOneStatus, typeOfpartionStatus partitionTwoStatus){
this();

    int offset = 7;
    for (int i = 1; i < 9; ++i)
    {
        partitionOneStatus[i-1].status = (bytes[offset + i] & 0x0F);
        partitionTwoStatus[i-1].status = (bytes[offset + i + 9] & 0x0F);
    }


    if( (bytes[offset + 9] == 0) || (bytes[offset + 9] == 1)){
        isPartitioned = (bytes[offset + 9] == 0) ? false : true;
    }

    partitionOneStatus.status = (bytes[offset + 18] - 0x30);
    partitionTwoStatus.status = (bytes[offset + 19] - 0x30);

    String model = "" + (char)bytes[1] + (char)bytes[2];
    if (model.equalsIgnoreCase("!A"))
        modelNum = "T32";
}

呼び出すと、次のようになります。

HeyStatus hstatusOne = new (bytesOne,partion1Status,partition2Status);
HeyStatus hstatusTwo = new (bytesTwo,partion3Status,partition4Status);
于 2013-05-31T08:14:57.397 に答える