gpt4 book ai didi

java - 如何解决警告: References to generic type should be parameterised

转载 作者:行者123 更新时间:2023-12-01 23:39:42 26 4
gpt4 key购买 nike

我创建了通用接口(interface)。

public interface Abc<T> {
void validatePojo(T input);
}

下面两个类是上述接口(interface)的实现。

1)-----------------------------------------------
public class Hello implements Abc<Pojo1> {
@Override
public void validatePojo(Pojo1 input) {
// some code
}
}
2)-----------------------------------------------
public class Hi implements Abc<Pojo2> {
@Override
public void validatePojo(Pojo2 input) {
// some code
}
}

现在,当我尝试创建 Abc 对象时,

T input = getInput(someInput);    // getInput return either Pojo1 or Pojo2
Abc abc = someFactory(someInput); //someFactory(someInput) will return either `new Hello()`
^ //or `new Hi()` based on `someInput`
|
+-------------------------------//warning
abc.validate(input);
<小时/>
public Abc<?> someFactory(final int input) {
return input == 1 ? new Hi() : new Hello();
}

public T getInput(final int input) {
return input == 1 ? new Pojo1() : new Pojo2();
}

我开始警告Abc is a raw type. References to generic type Abc<T> should be parameterized .

如何解决此警告?

我在互联网上查找了以下内容,但它不是很有用。

  1. 我发现的一种方法是使用 @SuppressWarnings .
  2. 声明变量如 Abc<Pojo1> abcAbc<Pojo2> abc ,我不能这样做,因为是否使用Pojo1或Pojo2完全取决于输入。(我不想在这里编写工厂方法的逻辑)

还有其他方法可以解决吗?

最佳答案

编译器只是告诉您,Abc 是通用的,并且取决于您在工厂中传递的类型。因此:

Abc<?> abc = ...
Abc<? extends Object> abc = ...

评论中提到的应该是有效的。如果您想指定传递的对象类型,则扩展版本很有用。

关于java - 如何解决警告: References to generic type should be parameterised,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58266180/

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