avoid runtime reflection