java - 通用方法输入通用对象类型

标签 java generics inheritance generic-programming

我正在重构代码...考虑到这个继承链...

public class Base

public class Simple extends Base

public class Secure extends Simple

public class Framework extends Secure

public class Application extends Framework

和类(class)

public class ApplicationCallback

目前,ApplicationCallback有这个方法public abstract ApplicationCallback#doSomething(Application app) ,但我希望可以通过 Base 访问它....无需更改 ApplicationCallback#doSomething(Application app) 中的所有代码至ApplicationCallback#doSomething(Base base) .

有没有办法可以定义一个方法来防止代码随处更改?

有点像ApplicationCallback#doSomething(T<? extends Base> app) ,这样当覆盖时,我可以直接输入 ApplicationCallback#doSomething(Base base)ApplicationCallback#doSomething(Simple simple)等等等等

问题是关于 @Override ApplicationCallback#doSomething()

最佳答案

您应该在 ApplicationCallback 上引入一个通用参数类(class)。这允许您定义仅采用某些子类型的回调:

class Callback<T extends Base> { abstract void doSomething(T t); }

这将允许您使用您定义的子类型中的方法,例如如果 Secure类添加了 getSecureThing()功能,您可以:

Callback<Base> base = new Callback<Base>() { 
  void doSomething(Base base) {
    // getSecureThing not available
  }
}
Callback<Application> app = new Callback<Application>() { 
  void doSomething(Application app) {
    // app.getSecureThing is available
  }
}

关于java - 通用方法输入通用对象类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49943819/

相关文章:

java - 我们如何在java中将xml文件直接插入到mysql表中?

swift - 访问类实异常(exception)部的泛型类类型

c++ - SFML 在实现绘制函数时从派生类转换不明确

java - 如何继承静态字段并更改它的值?

java - Eclipse JAD 结果

Java错误: first type: double,第二种类型:字符串

Java 将 char 从方法传递回 main

java - 泛型类中的静态最终变量导致未检查和原始类型警告

c# - Reflection Get List<> from List<T>(来自通用容器类型的容器类型)

java - 我的问题直接而简单 x 的值在这里返回 5 但为什么这背后的原因是什么