我对 Java 泛型有一点奇怪的问题。实际上,这可能根本不是问题,可能只是我试图在设计中错误地使用泛型。我不会给出应用程序的全部细节(这是无关紧要和无聊的)。
我创建了一个小片段来捕捉问题的本质。
有一个 Producer 界面,看起来像这样。
public interface Producer<P> {
public P produce();
}
这个接口有一个实现,看起来像这样
public class IntegerProducer<P> implements Producer<P> {
@Override
public P produce() {
return (P)new Integer(10);
}
}
我在生产方法中真正需要做的是
if (P instanceOf Integer) return (P)new Integer(10);
else throw new Exception("Something weird happened in the client app");
现在当然 P instanceOf Integer 将不起作用。但是,如果您了解我正在尝试做的事情的精髓,请您分享一个解决方案。
感谢您的帮助。
澄清1:问题不在于我只想返回整数。问题是在函数produce() 中,我需要检查客户端程序使用的泛型类型,并据此更改函数的行为。这并不是说我想将泛型类型限制为特定类型的 Object(我可以在其中使用通配符),而是我需要函数 generate() 根据泛型中使用的 Object 类型略有不同客户端代码。