【问题标题】:Implementing a method that is also overriden实现一个也被覆盖的方法
【发布时间】:2019-01-14 12:49:20
【问题描述】:

我正在将spring-security 添加到我的应用程序中,但遇到了一个问题。我的UserDetails 实现实现了org.springframework.security.core.userdetails.UserDetails,但也扩展了我的User 实体类。这两个都有一个getPassword() 方法,spring security 接口的方法返回一个String,我的返回一个字节数组,因为密码是加密的。

我希望我的实现实现接口的方法,而不是覆盖我的实体类的方法,但 Netbeans 不断给出返回类型无效的错误。我想避免重命名我的 getPassword() 方法来解决这个问题。

有没有办法告诉编译器实现接口的方法而不是重写超类?

谢谢

【问题讨论】:

    标签: java methods extends implements


    【解决方案1】:

    重载时不考虑返回类型,所以基本上你不能真正做到这一点。我会简单地重命名我的实现。

    【讨论】:

      【解决方案2】:

      你不能这样做,返回类型不能是两个在其他方面相同的 Java 方法签名之间的唯一区别。

      修复它的最简单方法是将User 声明为字段而不是扩展它:

      public class MyUserDetails implements UserDetails {
      
        private final User user;
      
      }
      

      【讨论】:

      • 这可能根本不是一个选项,以防您确实需要继承所有User属性
      • 我确实需要继承用户的属性。我将我的实体类的方法重命名为 getEncryptedPassword,因为这实际上是它返回的内容。编译器现在很高兴。
      猜你喜欢
      • 2015-05-11
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2011-12-13
      相关资源
      最近更新 更多