gpt4 book ai didi

c# - 如何在 java 中实现此 C# 通用接口(interface)?

转载 作者:行者123 更新时间:2023-11-29 05:41:46 25 4
gpt4 key购买 nike

好的,所以我已经研究了一段时间,我开始相信泛型在 Java 中的工作方式不同,或者我遗漏了一些东西。我有 C# 背景。

在 C# 中,我可能会像这样实现一个通用接口(interface):

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 ...
}
}

但是如您所见,这不会编译。即使我将参数设置为我将用于此实现的具体类型,编译器仍然希望看到接口(interface)的实际签名(抱歉,这对我来说很奇怪,哈哈)。

所以我尝试了这个:

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
}
}

现在方法的签名与接口(interface)的签名相匹配,编译器很满意,但是现在我的 return 语句不起作用。

很明显,我无法从网上找到的文档或 SO 上的文章中找出一些差异。我希望有人能对此有所了解?

最佳答案

试试这个接口(interface):

public interface Calculates<TInput, TOutput> {
TOutput RunCalculation(TInput input);
}

(删除您声明的“方法本地”泛型类型,这可能会使您和/或编译器感到困惑)。

然后,您的初始实现应该会起作用。

PS:在 Java 中使用单字母泛型也是惯例,所以 <I, O> Java 开发人员会更熟悉。

关于c# - 如何在 java 中实现此 C# 通用接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17265353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com