[英]How do I implement this C# generic interface in java?
好的,所以我已經玩了一段時間了,我開始相信泛型在Java中的工作方式不同,或者我錯過了一些東西。 我來自ac#background。
在C#中,我可能會實現這樣的通用接口:
public interface ICalculatorOperation<TInput, TOuput>
{
TOuput RunCalculation(TInput input);
}
public class MyCalculator : ICalculatorOperation<MyCalcInput, MyCalcOutput>
{
public MyCalcOutput RunCalculation(MyCalcInput input)
{
// implemented code ...
}
}
當我嘗試在Java中采用相同的方法時,這是我的第一直覺:
public interface Calculates<TInput, TOutput>{
<TInput, TOutput> TOutput RunCalculation(TInput input);
}
public class MyCalculator implements Calculates<MyCalcInput, MyCalcOutput>{
@override
public MyCalcOuput RunCalculation(MyCalcInput input){ // compile error, doesn't implement interface
// implemented code ...
}
}
但正如你所看到的,這將無法編譯。 即使我將參數設置為我將用於此實現的具體類型,編譯器仍然希望看到接口的實際簽名(對不起,這對我來說很奇怪)。
所以我嘗試了這個:
public class MyCalculator implements Calculates<MyCalcInput, MyCalcOutput>{
@override
public TOuput RunCalculation(TInput input){
MyCalcOutput result = new MyCalcOutput();
// set the results to this object
return result; // compile error, return type must be TOutput
}
}
現在方法的簽名與接口的簽名匹配,編譯器很高興,但是現在我的return語句不起作用。
很明顯,我從網上找到的文檔或SO上的文章中找不到一些差異。 我希望有人可以對此有所了解?
請嘗試使用此界面:
public interface Calculates<TInput, TOutput> {
TOutput RunCalculation(TInput input);
}
(刪除您聲明的“方法本地”泛型類型,這可能會使您和/或編譯器感到困惑)。
然后,您的初始實現應該工作。
PS:在Java中使用單字母泛型類型也是慣例,因此Java開發人員會更熟悉<I, O>
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.