我在覆盖接口中声明的方法时遇到了一些问题,该方法使用泛型参数作为其异常,并使用泛型作为其参数之一。为了说明,我编写了以下代码接口
package test;
import java.lang.IllegalArgumentException;
import java.util.List;
interface Interfaz {
<ARGUMENT_EXCEPTION extends IllegalArgumentException> String metodoA(String[] params) throws ARGUMENT_EXCEPTION;
<ARGUMENT_EXCEPTION extends IllegalArgumentException> String metodoB(List<String> params) throws ARGUMENT_EXCEPTION;
<ARGUMENT_EXCEPTION extends IllegalArgumentException> String metodoC(List<String> params) throws ARGUMENT_EXCEPTION;
}
class Implementadora implements Interfaz {
//This overrides metodoA correctly
@Override
public String metodoA(String[] params) throws IllegalArgumentException {
throw new IllegalArgumentException("ex");
}
//This one won't override metodoB, however
@Override
public String metodoB(List<String> params) throws IllegalArgumentException {
throw new IllegalArgumentException("ex");
}
//Ugly workaround (with unchecked cast)
@Override
public <ARGUMENT_EXCEPTION extends IllegalArgumentException> String metodoC(List<String> params) throws ARGUMENT_EXCEPTION {
throw (ARGUMENT_EXCEPTION)new IllegalArgumentException("ex");
}
}
通过javac运行,我得到
Line: 14 Implementadora is not abstract and does not override abstract method metodoB(java.util.List) in Interfaz Line: 23 name clash: metodoB(java.util.List) in Implementadora and metodoB(java.util.List) in Interfaz have the same erasure, yet neither overrides the other Line: 22 method does not override or implement a method from a supertype
请注意,在接口中,metodoA和metodoB之间的唯一区别在于它们的参数。
为什么Implementadora(Implementadora)的metodoB(metodoB)(代码)不重写Interfaz(代码),但重写metodoB(代码)的方式是一样的?
您不能期望字符串在方法A和方法B中返回,请查看您的接口,这里是编译的版本
class Implementadora implements Interfaz {
@Override
public <ARGUMENT_EXCEPTION extends IllegalArgumentException> String metodoA(String[] params)
throws ARGUMENT_EXCEPTION {
// TODO Auto-generated method stub
return null;
}
@Override
public <ARGUMENT_EXCEPTION extends IllegalArgumentException> String metodoB(List<String> params)
throws ARGUMENT_EXCEPTION {
// TODO Auto-generated method stub
return null;
}
@Override
public <ARGUMENT_EXCEPTION extends IllegalArgumentException> String metodoC(List<String> params)
throws ARGUMENT_EXCEPTION {
// TODO Auto-generated method stub
return null;
}
//This overrides metodoA correctly
}
我有一个问题,从抽象类中重写泛型方法。 这是我的抽象类: 当我创建类(B)来实现类(a)时,如下所示: 显示了(getData)方法中的以下编译错误: ”“B。getData“(“字符串函数(字符串)”不是“a”的有效重写。getData'('字符串函数(类型)‘)。dart(无效覆盖) 以及返回语句中的此错误: 类型为“String”的值不能从方法'getData'返回,因为它的返回类型为'St
我想在我的android项目中自动转换视图。所以,我想重写 方法 方法但是java编译不允许这样做,但是重写的方法不会与父方法冲突,并且总是返回视图对象或其子对象。我发现了一些信息,java不允许用泛型方法重写非泛型方法,但我找不到解释。 http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ8
在研究泛型时,我注意到泛型方法和泛型类型(类或接口)在类型引入语法上的一个差异使我感到困惑。 泛型方法的语法为 文件上说 为了彼此保持一致,我希望方法语法为 ,或者类型语法(for class)为,但事实显然并非如此。 为什么一个要介绍在前,另一个要介绍在后? 我主要以的形式使用泛型,并认为可能看起来很奇怪,但这是一个主观的参数,此外对于方法也是这样。您可以调用,类似于 在寻找技术解释时,我想在指
我正在尝试理解使用以下代码得到的名称冲突错误: 错误消息: 错误:名称冲突:
如何获取这个类的类型?对于上下文,我使用ModelMapper,我需要类类型T从S转换为T。 背景: 我已经尝试了N种方法,其中我放置了“//一些方法来获取类型”,但没有任何效果。例如: 或
我正在尝试用来自spring WebFlux的WebClient制作一个客户端库。 服务器返回如下JSON所示的响应: 结果字段包含元素数组,这些元素可以根据使用的API而不同。 有关该API的更多信息,请参阅ServiceNow产品中的表API。 正如您在文档中所看到的,API路径如下所示:GET/now/table/{tableName},其中tableName可以是不同的值,tipology