java泛型不检查_如何防止使用Java泛型检查根类?

您不能使用泛型强制执行此类限制.最好的办法是在方法内部进行类型检查,并在收到Command.class作为参数时引发异常.甚至,为该场景添加文档注释:

/**

*

* @param cl

* @throws IllegalArgumentException

* when type of cl is Command.class

* @return

*/

public T createCommand(Class cl) {

if (cl == Command.class) {

throw new IllegalArgumentException("Can only accept subclasses of Command");

}

return null;

}

最好在接口方法中添加文档注释,以便任何实现类都知道合同.

如果可行,另一种方法是在Command和MyCommand之间引入一个抽象类,并相应地更改范围:

class Command {

}

abstract class AbstractCommand extends Command {

}

class MyCommand extends AbstractCommand {

}

因此,您的所有子命令现在都将扩展AbstractCommand而不是Command.然后,您的界面将类似于:

public interface CommandFactory {

public T createCommand(Class cl);

}

然后,您不能将Command.class传递给它.但是我认为这不会解决您要解决的具体问题(我们真的不知道它是什么),因为现在您可以将AbstractCommand.class传递给该方法.但是,您可以使用AbstractCommand的可见性,因为您不会在其他地方使用它.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值