gpt4 book ai didi

Java 泛型和原始类型

转载 作者:行者123 更新时间:2023-12-01 18:56:36 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com