0

サンプルインターフェースがあります

 public interface SampleVariables {
int var1=0;
int var2=0;
}

そして、私は複数のクラスでvar1とvar2を使用したいのですが、これを使用してこれを実行しようとしています

public class InterfaceImplementor  extends Message  implements SampleVariables{

private int var3;

public int getVar1(){
    return var1;
}

public void setVar1(int var1){
    SampleVariables.var1=var1; // ** error here in eclipse which says " remove final modifier of 'var1' " Though I have not defined it as final
}

public int getVar3() {
    return var3;
}

public void setVar3(int var3) {
    this.var3 = var3;
}

}

ここで、クラスMessageは、使用しようとしている事前定義されたクラスであり、クラスMessageでvar1、var2を定義できません。

これを行うためのより良い方法はありますか?それとも私は本当に単純なものが欠けていますか?

4

4 に答える 4

1

インターフェイスのすべてのフィールドは暗黙的に静的で最終的なものであるため、上記の警告が表示されます。詳細については、このSOの質問を参照してください。

これらの変数を持つ基本クラスが必要なように思えますが、サードパーティのクラスから派生しているため、これを行うことはできません。

あなたがその実装を制御していないので、私はそのサードパーティのクラスから派生しません。むしろ、それをラップして追加機能を提供するクラスを作成したいと思います。これにより、サードパーティのクラスが変更された場合に、後で行う必要のある変更の範囲を制限できるというレベルの快適さが得られます。

残念ながら、Javaはミックスインをサポートしていません。これは、ここで達成しようとしていることです。

于 2012-08-02T09:07:58.940 に答える
1

interfaceデフォルトの変数では、値を変更することはstatic finalできません。あなたはできませんSampleVariables.var1=var1;

あなたにできることは

public class InterfaceImplementor  extends Message { // do not implement interface here

private int var3;
private int var1;

public void setVar1(int var1){
    this.var1=var1; // will work
}

およびの変数にアクセスするにはinterface SampleVariables.var1

于 2012-08-02T09:08:36.297 に答える
1

Interfaceのメンバー変数はbyであるため、一度初期化すると値を再度変更default static, finalすることはできません。reassign

Every field declaration in the body of an interface is implicitly public, static, and final. It is permitted to redundantly specify any or all of these modifiers for such fields.

Java言語仕様を参照してください。

于 2012-08-02T09:10:34.710 に答える
0

これには抽象クラスを使用する必要があります。

例:

public abstract class AbstractClass {
    protected int var1;
}
class SubClass1 extends AbstractClass {

}
class SubClass2 extends AbstractClass {

}

このようにして、SubClass1とSubClass2にはvar1があります。ゲッターとセッターでも同じことができますが、ポイントを作るためにこれはより短いことに注意してください。

于 2012-08-02T09:15:11.057 に答える