2012-11-02 52 views
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專家的人來說)但是主題是固定的。我給了你點數。再次感謝您的幫助。 [關閉]

+2

你會得到什麼錯誤? – 2012-11-02 09:17:45

+0

可能類似'put(IAdant)類型Class_1 ist不適用於參數(Integer)' – jlordo

+0

'IImenResult'擴展IAdant嗎? –

回答

3

你應該實現在Class_1方法put(Integer)這個工作

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"); 
    } 
} 

UPDATE 您的評論之後,我覺得這就是你正在嘗試做的:

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; 
     } 
    } 
} 
+0

這不會解決問題,因爲我發送Integer類的構造函數另一個我發送整數或字符串或布爾值 –

+0

好吧,看看我的更新 – MaVRoSCy

+0

感謝支持和幫助 –

3

該行:myClaass.put(new ImenResult(1).Show());將失敗,因爲myClaass.put()預計會得到一個實現IAdant的對象,但是您要發送並且IntegerInteger未實施IAdant

+0

我知道這一點,但問題是困難得多,因爲這種方法我不能編輯,我必須發送整數或布爾或字符串或類構造函數。 –

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

第一種情況下將文件的辯論,因爲,你的put方法預計IAdant(任何實現IAdant)和要傳遞一個整數作爲展示方法將返回一個。

第二種情況會因爲您的ImenResult類未執行或IAdant類型相同的原因而失敗。

如果您希望第二種情況起作用,請在ImenResult類中實現IAdant。

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

now myClaass.put(new ImenResult(2)); line可以解決任何編譯器錯誤。如果你想得到第一個case myClaass.put(new ImenResult(1).Show());要編譯,你必須在myClass類中重載put方法。

public void put(int val) { 
     //do your logic here 
    } 
+0

我實現你的想法,但始終是錯誤(同樣) –

+0

@ Rafael-JuniorMVCDeveloper你仍然會得到第一種情況的錯誤,因爲你的put方法期望IAdant的一個實例,並且你正試圖傳遞一個int。 – PermGenError

+0

我明白,但這是學校問題,我不能編輯這個。我停止了工作,因爲我有這個問題。 100%的想法發送到某些方法int,字符串,bollean或類。 –