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

Java泛型名称冲突,方法未正确覆盖

锺离浩慨
2023-03-14
问题内容

我对此有不同的疑问,但是我仍然觉得这个话题很混乱。

我要做的就是拥有一个实现接口的抽象类,并具有一个扩展此抽象类的类,以便硬类需要实现getKommune()and setKommune(Kommune kommune),而无需其他方法,因为该方法位于抽象类中。

我有以下界面。

public interface KommuneFilter {

    <E extends AbstractKommune<?>> void addKommuneFromCurrentUser(E e);

    Kommune getKommune();

    void setKommune(Kommune kommune);
}

还有这个抽象类

public abstract class AbstractKommune<E extends AbstractKommune<?>> implements KommuneFilter {
    @PrePersist
    void addKommuneFromCurrentUser(E e) {
            Kommune k = e.getKommune();
    }
}

我想这样使用

    public class Person extends AbstractKommune<Person> {
        private Kommune kommune;             
        public void setKommune(Kommune kommune) {this.kommune=kommune;}
        public Kommune getKommune() {return kommune;}
    }

但是,我得到

名称冲突:的方法具有相同的擦除类型,但不会覆盖它

为什么没有正确覆盖它?

更新

感谢@Bozho,解决方案是这样的:

public interface KommuneFilter<E extends AbstractKommune<?>> {
    public void addKommuneFromCurrentUser(E e);
}

public abstract class AbstractKommune<E extends AbstractKommune<?>> implements KommuneFilter<E>

public class Person extends AbstractKommune<Person>

问题答案:

我建议使接口通用,而不仅仅是其方法:

interface KommuneFilter<E extends AbstractKommune<?>> { .. }

然后

public abstract class AbstractKommune<E extends AbstractKommune<?>> 
     implements KommuneFilter<E>


 类似资料:
  • 我正在尝试理解使用以下代码得到的名称冲突错误: 错误消息: 错误:名称冲突:

  • 问题内容: 如果我有两个接口,它们的用途完全不同,但是具有相同的方法签名,那么我如何使一个类同时实现两个接口,而又不被迫编写一个同时为两个接口服务的方法并在该方法中编写一些复杂的逻辑是否实现检查调用的对象类型并调用适当代码的实现? 在C#中,这可以通过所谓的显式接口实现来克服。Java中有什么等效方法吗? 问题答案: 不,没有办法在Java的一个类中以两种不同的方式实现相同的方法。 这可能导致许多

  • 我想在我的android项目中自动转换视图。所以,我想重写 方法 方法但是java编译不允许这样做,但是重写的方法不会与父方法冲突,并且总是返回视图对象或其子对象。我发现了一些信息,java不允许用泛型方法重写非泛型方法,但我找不到解释。 http://www.angelikalanger.com/GenericsFAQ/FAQSections/TechnicalDetails.html#FAQ8

  • 问题内容: 我将这个问题作为作业: 包装/命名 我们创建了很多程序包,并在其中定义了类和接口。我们还讨论了命名它们时必须记住的要点。在本次作业中,我们将了解命名的重要性。 请更改上一个作业中的程序包名称,以使两个程序包具有相同的名称,并分析将引发的结果/错误。 我的怀疑: 我无法想到一种方法(场景)来证明所要求的内容。由于Java导入是绝对的,因此所描述的情况似乎不可能产生(IMO)。 请帮我示范

  • 问题内容: 考虑以下jfiddle http://jsfiddle.net/bchapman26/9uUBU/29/ 我有2个模块(module1和module2)。module1和module2都定义了一个名为myService的服务。当两个模块都导入myApp时,这似乎在Angular中的myService上创建了名称冲突。看来AngularJs仅使用第二个服务定义,而没有警告您可能的问题。