1

これを送信するとエラーが発生します:

myClaass.put(new ImenResult(1).Show());
myClaass.put(new ImenResult(2));

インターフェイスパラメータを持つクラスに送信するため、この問題が発生する理由を理解しています。私の質問は、このデータを送信するためにインターフェイスに何を追加する必要があり、後で文字列または別のもの(クラス)を送信できるため、この構造はこれと同じである必要があるため(私の決定ではない)、エラーが発生していません。これは非常に難しい質問だと思います。

プログラム:

Class_1 myClaass = new Class_1();
myClaass.put(new ImenResult(1).Show());
myClaass.put(new ImenResult(2));
myClaass.put(new ImenResult(3));

ImenResult:

public class ImenResult implements IImenResult{

    public Integer i;

    public ImenResult(Integer  i ) {
        this.i = i;
    }

    @Override
    public Integer Show() {

        return i;
}

Class_1

public class Class_1 implements IQRack{

    public List<IAdant> adan;


    public void put(IAdant value) {
        adan.add(value);
    }

    }

IAdan

public interface IAdant  {

}

助けてくれてありがとうこれは難しい質問ですが(もちろんJavaの専門家ではない人にとっては)、トピックは修正されています。私はあなたにポイントを与えました。助けてくれてありがとう。[閉まっている]

4

3 に答える 3

3

行:myClaass.put(new ImenResult(1).Show());は失敗します。これは、myClaass.put()を実装するオブジェクトを取得することを期待しているためIAdantですが、とを送信していますIntegerIntegerを実装していませんIAdant

于 2012-11-02T09:19:49.947 に答える
3

これを機能させるには、でメソッドを実装する必要がありput(Integer)ますClass_1

public class Class_1 implements IQRack {

    public List<IAdant> adan;

    public void put(IAdant value) {
        adan.add(value);
    }

    void put(Integer Show) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

更新 あなたのコメントの後、私はこれがあなたがやろうとしていることだと思います:

public class Class_1 implements IQRack {

    private List<IAdant> adan = new ArrayList<IAdant>();

    public Class_1(IAdant i) {
        this.put(i);
    }

    void put(IAdant Show) {
        throw new UnsupportedOperationException("Not yet implemented");
    }
}

public class IAdant {

    Boolean bValue;
    String sValue;
    Integer iValue;

    public IAdant(Object o) {
        if (o.getClass().isInstance(new Integer(1))) {
            iValue = (Integer) o;
        } else if (o.getClass().isInstance(false)) {
            bValue = (Boolean) o;
        } else if (o.getClass().isInstance("")) {
            sValue = (String) o;
        }
    }
}
于 2012-11-02T09:25:39.483 に答える
2
myClaass.put(new ImenResult(1).Show());
myClaass.put(new ImenResult(2));

最初のケースはfile、cuzで、putメソッドはIAdant(IAdantを実装するもの)を期待し、showメソッドが整数を返すので整数を渡します。

2番目のケースは、ImenResultクラスが実装されていないのと同じ理由またはIAdantのタイプが原因で失敗します。

2番目のケースを機能させたい場合は、IAdantをImenResultクラスに実装します。

public class ImenResult implements IImenResult,IAdant{
//implement the methods from both the interfaces
}

これで、 myClaass.put(new ImenResult(2));lineはコンパイラエラーなしで機能します。

最初のケースを取得したい場合myClaass.put(new ImenResult(1).Show()); コンパイルするには、myClassクラスのputメソッドをオーバーロードする必要があります。

public void put(int val) {
        //do your logic here
    }
于 2012-11-02T09:22:41.420 に答える