В Kotlin как мне создать экземпляр класса, в котором имя класса является переменной? - PullRequest
0 голосов
/ 31 января 2020

Я пишу класс Graph в Kotlin. Вот мой код:

import java.util.*

class Graph<Class>(connectionProb: Double) {
    // a general network class
    val nodes = mutableListOf<Class>()
    val connectionProb = connectionProb
    val connections = hashMapOf<Class, MutableList<Class>>()

    var nextID = 0

    private fun createNode() {
        // Here is where I need help
    }
}

Я хочу иметь возможность указать тип узла для каждого графика. Приведенный выше код скомпилируется, но я не уверен, как инициализировать новые узлы. Единственный аргумент, который я хочу передать каждому узлу, независимо от его типа, это nextID.

Спасибо!

1 Ответ

0 голосов
/ 31 января 2020

Первое, что вы должны сделать, это определить class для вашего graph node, и вместо того, чтобы поддерживать map для соединений, пусть каждый узел ведет список своих соединений. Таким образом, ваш code будет выглядеть следующим образом

class Graph<T>(connectionProb: Double) {

var nextId = 0
val nodes = mutableListOf<Node<T>>()

// Define a node class, so if you have graph of Integer then you want a node of Integer
class Node<T>(var id: Int){
    val connections = mutableListOf<Node<T>>()

    fun addConnection(newConnection: Node<T>){
        connections.add(newConnection)
    }

    override fun toString() = "$id"
    /** add other functions, such as remove etc */
}

fun createNode(){
    var newNode = Node<T>(nextId++)
    nodes.add(newNode)
}

}

Теперь, чтобы использовать это graph, вы будете выполнять followig

fun main(){
    var myGraph = Graph<Integer>(10.9)
    myGraph.createNode()
    myGraph.createNode()
    myGraph.nodes[0].addConnection(myGraph.nodes[1])

    /* Print all nodes in graph */
    for(node in myGraph.nodes) print("  $node")

    /* Print connections of first node */
    for(node in myGraph.nodes[0].connections) print("\n\nConnection id: $node")
}

Обратите внимание, что это будет дать вам общее представление о том, как go реализовать реализацию графа, и есть много вещей, которые вы можете улучшить в реализации. Чтобы узнать больше, я предлагаю вам прочитать хорошую книгу, такую ​​как Структуры данных и алгоритмы в Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...