泛型空重载构造函数以及何时不使用泛型
本文关键字:泛型 何时不 重载 构造函数 | 更新日期: 2023-09-27 18:36:44
我目前正在构建一个通用状态机,我正在使用带有通用参数的StateMachine
构造函数在创建时设置回退状态,以防机器无事可做。
我想知道有两个构造函数是否是一种不好的做法,一个由状态机本身在需要创建新的状态对象时使用,另一个在第一次初始化状态机时使用(设置默认回退状态)。
我最大的问题:我是否滥用泛型,有没有不应该使用泛型的时候?
状态机创建:
//The generic parameter is the default "fallback" state.
_nodeStateMachine = new NodeStateMachine<IdleNodeState>();
状态机构造函数:
public NodeStateMachine()
{
_currentState = new T();
}
以下是在NodeStateMachine
类中如何更改状态:
public void ChangeState<U>() where U : INodeState, new()
{
_nextState = new U();
}
有问题的构造函数直接位于状态本身:
public NullNodeState(){} // To use the class generically.
public NullNodeState(ConditionCheck check)
{
_nullCheck = check;
}
我不明白状态机是如何通用的,因为似乎唯一的限制是状态实现INodeState
。在这种情况下,我将创建一个指定初始状态的静态工厂方法:
public class NodeStateMachine
{
private INodeState _nextState;
private NodeStateMachine(INodeState initial)
{
_nextState = initial;
}
public void ChangeState<U>() where U : INodeState, new()
{
_nextState = new U();
}
public static NodeStateMachine Create<T>() where T : INodeState, new()
{
return new NodeStateMachine(new T());
}
public static NodeStateMachine Create(INodeState initial)
{
return new NodeStateMachine(initial);
}
}