Java 泛型和原始类型

标签 java generics parameters raw-types

当我这样写方法时。我收到此警告:

BaseEvent is a raw type. References to generic type BaseEvent should be parameterized

@Override
public <T extends BaseEvent> void actionPerformed(T event) { ... }

代码仍然运行良好,尽管警告标志很烦人。当我以这种方式编写代码时,警告就会消失。

@Override
public <T> void actionPerformed(BaseEvent<T> event) { ... }

对于上一条消息,它不保证它是 BaseEvent 的子类。于是我又改了:

@Override
public <T extends EventObject> void actionPerformed(BaseEvent<T> event) { ... }


@Override
public <T extends BaseEvent<T>> void actionPerformed(BaseEvent<T> event) { ... }

BaseEvent类是我创建的一个扩展EventOBject的类

public abstract class BaseEvent<T> extends EventObject
{
    private String eventType;

    // Constructor
    public BaseEvent(Object source, String type) 
    {
        super(source);
        eventType = type;
    }


    public String getEventType()    { return eventType; }   
}

所有方法似乎都工作正常。但我想知道哪个是更好的解决方案。

最佳答案

你在哪里使用TBaseEvent定义?按如下方式定义

public abstract class BaseEvent extends EventObject

那么你就不会收到警告

@Override
public void actionPerformed(BaseEvent event) { ... }

更新

假设您的BaseEvent确实需要参数化。然后写下下面的内容

@Override
public <T> void actionPerformed(BaseEvent<T> event) { ... }

这将为您提供参数化方法。

更新1

It doesn't guarantee that is a subClass of BaseEvent.

确实如此。 <T>是方法模板的参数。该参数转到BaseEvent<T>这是 EventObject 的子类根据定义。

更新2

不要在学习之初使用泛型。泛型仅用于额外的自测试。使用原始类型。然后当你开始感觉到它们时,你就会正确地参数化它们。

关于Java 泛型和原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13752436/

相关文章:

function - PowerShell 函数不接受对象数组

java - 膨胀异常 : Binary XML file line #1: Error inflating class <unknown> caused by OutOfMemoryError

java - 标准Java封装中有HttpServer吗?

c# - 如何禁用泛型复杂类型字段的延迟加载?

xml - 如何将 xslt 中的参数用作 XPath?

c++ - 从 'int' 到 'char *' 的无效转换

java - 将 "any"类类型传递到 java 方法中

java - 为什么我无法通过此套接字发送文本?

swift - 为什么我不能在 Swift 中将可选数组转换为父类(super class)?

java - 我如何实现通用 BST?