当前位置: 首页 > 面试题库 >

怎么纠正?—“都定义了getObjectCopy(),但返回类型不相关” —但它是* one *函数

丘畅
2023-03-14
问题内容

我具有以下接口层次结构(删除了所有不相关的功能)。尝试编译时出现此错误:

types ValidLineGettable and ValidateValue<java.lang.String> are incompatible; both define getObjectCopy(), but with unrelated return types

这些都是从相同的函数派生而来的-不是两个具有相同名称 的不同函数,在同一接口中的相同函数 。你如何处理与接口 必须 从两个不同的接口继承
自己 必须从单一基接口继承?

就我而言,它在概念上和名称上都是相同的功能。

(尽管我对Copyable接口是否是一个好主意感兴趣,但是我对它的使用很感兴趣。它在我使用的 许多
代码中都很好,并且对我来说效果很好…我对通用继承/设计最感兴趣。题。)

我不清楚如何最好地处理此问题。我将不胜感激任何建议。谢谢。

public interface Copyable  {
   Copyable getObjectCopy();
}
interface ValidateValue<O> extends Copyable  {

   //Other functions...

   @Override
   ValidateValue<O> getObjectCopy();
}

//For classes that may be able to be Decorated into a TextLineValidator
interface ValidLineGettable extends Copyable  {

   //Other functions...

   ValidLineGettable getObjectCopy();
}
interface TextLineValidator extends ValidateValue<String>, ValidLineGettable  {

   //Other functions...

   @Override
   TextLineValidator getObjectCopy();
}

错误:

C:\java_code\Copyable.java:17: types ValidLineGettable and ValidateValue<java.lang.String> are incompatible; both define getObjectCopy(), but with unrelated return types
     interface TextLineValidator extends ValidateValue<String>, ValidLineGettable  {
     ^
 1 error

 Tool completed with exit code 1

问题答案:

假设所有返回值Copyable都为extension,则所有版本的getObjectCopy()返回Copyable。例如:

public interface ValidateValue<O> extends Copyable
{
     // Other functions...

     @Override
     Copyable getObjectCopy();
}

public Blammy implements ValidateValue<String>
{
    // Other functions...

     @Override
    public Copyable getObjectCopy()
    {
        SomethingThatExtendsCopyable blammy = new SomethingThatExtendsCopyable();

        return (Copyable)blammy;
    }
}

编辑

在上面的代码中,错误是由以下事实引起的:“
getObjectCopy”方法ValidateValue<String>ValidLineGettable接口中具有不同的返回值,但调用签名相同。在Java中,仅通过更改返回值就不会获得多态。这会导致编译错误。

如果将返回值更改为,CopyableTextLineValidator不再通过扩展其两个父接口来获得值。一种更简单的方法是拥有一个接口(可复制)和实现该接口的多个类,每个类都返回一个可复制值,该值可以是扩展(或实现)可复制类的实例。



 类似资料:
  • 问题内容: 我有一个es6类,该类负责获取数据,对其进行转换,然后使用新转换的数据更新该类的属性。到现在为止还挺好。类本身还有另一种方法,可以按照听起来的方式进行操作。这是该类的代码: 简单来说,除了我在方法中有一个机制。现在,此代码将正常运行: 但是它只能打印到控制台中:如何将它用作功能? 喜欢: 返回一个但不是最终值。我已经阅读了有关此主题的几篇相关文章,但它们都提供了日志记录示例,从此不再返

  • 我正在Windows上设置Maven,我认为所有的设置都是正确的,但当我运行时,我仍然得到错误“JAVA_HOME环境变量没有正确定义” null null C:\ProgramData\Oracle\Java\JavaPath C:\Apache-Maven-3.6.3\bin 似乎无法弄清楚这些环境变量有什么问题,以至于Maven会给我这个错误。任何帮助都将不胜感激!

  • 问题内容: 我在某处读到,函数应始终仅返回一种类型,因此以下代码被视为错误代码: 我想更好的解决方案是 返回None然后创建一个新的空元组不是更便宜的内存明智的选择吗?或者即使在较大的项目中,这种时差也太小而无法引起注意? 问题答案: 为什么函数应该返回一致类型的值?满足以下两个规则。 规则1-函数具有“类型”-输入映射到输出。它必须返回一致的结果类型,否则它不是函数。一团糟。 从数学上讲,我们说

  • 我可以看到它不工作,因为我尝试了它。我只是无法解释为什么一定要这样。 第二个方法来自一个类,该类是实现第一个getValue()方法的类的子类。 为什么同名不足以覆盖该方法?我想到的唯一论点是,它将反对“是一个”关系,因为用A扩展的第二个方法的类必须具有与A相同的能力,如果你重写返回类型,你就打破了那个法律,对吧?

  • 下面这个贴图中的告警怎么去除呢,需要怎么修改呢? 代码如下: 问题补充: 实例化后为其赋值时 ts警告:类型实例化过深,且可能无限 PbfLayer这个类中的完整代码如下:

  • 我想使返回数据类型的的函数与传入的参数的数据类型相同。例如,我会这样调用函数: 因为我将一个传递给,所以它返回了一个