泛型空重载构造函数以及何时不使用泛型

本文关键字:泛型 何时不 重载 构造函数 | 更新日期: 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);
    }
}