java - 当类型仅在运行时已知时如何指定泛型类型?

标签 java class object templates generics

我有一些代码需要动态生成一个通用对象,其通用类型为一组子类中的 1 个:例如keyEventmouseEventappEvent,这些都扩展了 event。因此,我的通用类 EventFunction 需要一个模板,但是在收到事件之前我不知道类类型是什么,所以有没有办法执行以下操作:

Event event = new KeyEvent(); // FOR EXAMPLE RECIEVING A KEY EVENT
// Require an EventFunction with that event class as the generic type
EventFunction<event.getClass()> func = new EventFunction<event.getClass()>(event);

如何执行上述操作:即动态指定通用值?

最佳答案

以下代码片段可能会对您有所帮助:

class Event { }

class FooEvent extends Event { }

class EventFunction<T extends Event> {
    public EventFunction(T event) { }
}

class EventFunctionFactory {
   public <T extends Event> EventFunction<T> buildFunction(T event) {
       if (event.getClass().equals(FooEvent.class)) {
            System.out.println("A new FooEventFunction!");          
            return new EventFunction<T>(event);
       }
       else {
           return null;
       }
   }
}

使用方法如下:

    EventFunctionFactory factory = new EventFunctionFactory();
    Event foo = new FooEvent();
    EventFunction<Event> function = factory.buildFunction(foo);

这里有一个片段

http://tpcg.io/bMNbkd

关于java - 当类型仅在运行时已知时如何指定泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54057016/

相关文章:

java - 如何在java中将基本类型数组作为对象数组传递?

java - 静态方法很慢

java - 在 Netbeans 中使用 GUI 时,我尝试调用私有(private) void 函数

c++ - 单个成员而不是全类的 friend 声明?

c++ - 将两个选项之间的参数传递给一个类

c# - LINQ - 聚合和计算多个参数

java - 一行java代码及其作用?

java - 如何在我的 MainActivity(或应用程序)开始时隐藏 fragment ?

java - Android:无法实例化类:没有空构造函数

git - 为什么 git log --find-object 对于给定的 blob 会获得两个具有不同内容的文件提交?