gpt4 book ai didi

java - 将 java 泛型用于简单工厂 - 如何避免这些警告

转载 作者:行者123 更新时间:2023-11-30 11:47:19 31 4
gpt4 key购买 nike

我正在尝试正确理解泛型,并且我已经编写了一个非常简单的工厂,但是我看不出如何绕过这两个警告(我已经很卑躬屈膝了,但可能我不是使用正确的术语进行搜索)。哦!而且我不想只是抑制警告 - 我很确定应该可以正确地做到这一点。

  • Type safety: The constructor simpleFactory(Class) belongs to the raw type simpleFactory. References to generic type simpleFactory should be parameterized
  • simpleFactory is a raw type. References to generic type simpleFactory should be parameterized

我尝试解决这个问题的所有构造实际上都无法编译 - 这似乎是我能得到的最接近的结果。生成警告的是标记为++++ 的行(在 Android 项目的 Eclipse Indigo 上)

我知道周围有一些优秀的对象工厂,但这是关于理解语言而不是实际创建工厂;)

这是来源:

import java.util.Stack;

public class simpleFactory<T> {

private Stack<T> cupboard;
private int allocCount;
private Class<T> thisclass;

public static simpleFactory<?> makeFactory(Class<?> facType) {
try {
facType.getConstructor();
} catch (NoSuchMethodException e) {
return null;
}
+++++ return new simpleFactory(facType);
}

private simpleFactory(Class<T> facType) {
thisclass = facType;
cupboard = new Stack<T>();
}

public T obtain() {
if (cupboard.isEmpty()) {
allocCount++;
try {
return thisclass.newInstance();
} catch (IllegalAccessException a) {
return null;
} catch (InstantiationException b) {
return null;
}
} else {
return cupboard.pop();
}
}

public void recycle(T wornout) {
cupboard.push(wornout);
}
}

最佳答案

所以重要的部分是您实际上想要捕获传递给工厂方法的类的类型。我使用相同的标识符 (T) 来隐藏类的类型,这可能有点令人困惑,因此您可能想使用不同的标识符。

您还需要使用特定类型实例化类,如提到的 cutchin。

public static <T> simpleFactory<T> makeFactory(Class<T> facType)
{
try
{
facType.getConstructor();
}
catch (NoSuchMethodException e)
{
return null;
}
return new simpleFactory<T>(facType);
}

关于java - 将 java 泛型用于简单工厂 - 如何避免这些警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9370514/

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