# RoomDatabaseConstructor

Artifact: [androidx.room:room-runtime](https://developer.android.com/jetpack/androidx/releases/room) [View Source](https://cs.android.com/search?q=file:androidx/room/RoomDatabaseConstructor.kt+class:androidx.room.RoomDatabaseConstructor) Added in [2.7.0](https://developer.android.com/jetpack/androidx/releases/room#2.7.0)

*** ** * ** ***


```
public interface RoomDatabaseConstructor<T extends RoomDatabase>
```

<br />

*** ** * ** ***

Defines a class that can instantiate the Room generated implementation of an 'abstract' `https://developer.android.com/reference/androidx/room/Database` annotated `https://developer.android.com/reference/androidx/room/RoomDatabase` definition.

This interface is to be used in conjunction with `https://developer.android.com/reference/androidx/room/ConstructedBy` to define an 'expect' declaration of an 'object' that implements this interface. The defined 'object' can then be optionally used in Room's `databaseBuilder` or `inMemoryDatabaseBuilder` as the `factory`.

For example, with the following object definition:

```
expect object MusicDatabaseConstructor : RoomDatabaseConstructor<MusicDatabase>
```

one can reference the object's `https://developer.android.com/reference/androidx/room/RoomDatabaseConstructor#initialize()` during database creation:

```
fun createDatabase(): MusicDatabase {
    return Room.inMemoryDatabaseBuilder<MusicDatabase>(
        factory = MusicDatabaseConstructor::initialize
    ).build()
}
```

For Room to correctly and automatically use 'actual' implementations of this interface, they must be linked to their respective `https://developer.android.com/reference/androidx/room/Database` definition via `https://developer.android.com/reference/androidx/room/ConstructedBy`.

| Parameters |
|---|---|
| `<T extends https://developer.android.com/reference/androidx/room/RoomDatabase>` | The `https://developer.android.com/reference/androidx/room/Database` and `https://developer.android.com/reference/androidx/room/ConstructedBy` annotated class linked to this constructor. |

| See also |
|---|---|
| `https://developer.android.com/reference/androidx/room/ConstructedBy` |   |

## Summary

| ### Public methods |
|---|---|
| `abstract @https://developer.android.com/reference/androidx/annotation/NonNull T` | `https://developer.android.com/reference/androidx/room/RoomDatabaseConstructor#initialize()()` Instantiates an implementation of `https://developer.android.com/reference/androidx/room/RoomDatabaseConstructor`. |

## Public methods

### initialize

Added in [2.7.0](https://developer.android.com/jetpack/androidx/releases/room#2.7.0)

```
abstract @NonNull T initialize()
```

Instantiates an implementation of `https://developer.android.com/reference/androidx/room/RoomDatabaseConstructor`.

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/NonNull T` | T - A new instance of `https://developer.android.com/reference/androidx/room/RoomDatabaseConstructor`. |