Как получить данные из конструктора переданных значений в kotlin - PullRequest
0 голосов
/ 20 июня 2019

Я передал данные в конструктор, но как получить данные в другом классе?

class EmployeeConst(var name:String , var age:String) {
    var profession:String ="Not mentioned"

    constructor(name:String, age: String, profession:String):this(name,age){
        this.profession = profession
    }
        fun getDetails() {
            Log.i("",""+"Employee details is $name whose profession is $profession and age is $age")
        }

}

 class FragmentDashboard : Fragment() {

        override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
        ): View? {
             var person= EmployeeConst("name","sdf","test")
            Log.i("Testings",""+person.getDetails()) //here testings is not printing correctly.

            return inflater.inflate(R.layout.fragment_dashboard, container, false)
        }

Здесь, в журнале, я не получаю пропущенные данные

I / Тестирование: kotlin.Unit

Ответы [ 3 ]

1 голос
/ 20 июня 2019

На самом деле, ваш конструктор передал значения не проблема.Ваша проблема в том, что getDetails ничего не возвращает, или в kotlin это Unit.

Вот улучшения, которые я создал: во-первых, удалите перегруженный конструктор и используйте значение по умолчанию для профессии.Этот подход работает так же, как перегруженный метод, только в том, что он имеет более короткие строки.Затем я исправил вашу функцию getDetails, чтобы она возвращала строку.Проще говоря, знак равенства - это сокращение от «return this ->», где в синтаксисе это

fun methodNAme() return this -> something
class EmployeeConst(
    var name:String,
    var age:String,
    var profession:String = "Not mentioned"
) {
    fun getDetails() =
        "Employee details is $name whose profession is $profession and age is $age"
}

class FragmentDashboard : Fragment() {
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        var person= EmployeeConst("name","sdf","test")
        Log.i("Testings",""+person.getDetails()) //here testings is not printing correctly.

        return inflater.inflate(R.layout.fragment_dashboard, container, false)
    }
}
0 голосов
/ 20 июня 2019

Метод getDetails() является функцией void, т.е. ничего не возвращает. Когда вы вызываете этот метод как

Log.i("Testings",""+person.getDetails())

вы ожидаете, что метод вернет строку. Есть два решения:

Вы меняете Log в классе FragmentDashboard:

Log.i("Testings")
person.getDetails()

Вы меняете возвращаемое значение метода getDetails().

fun getDetails(): String {
    return "Employee details is $name whose profession is $profession and age is $age"
}

Используя второй метод, вы можете вызывать метод так же, как и вы.

0 голосов
/ 20 июня 2019

Он правильно регистрируется, так как getDetails() является функцией Unit.

Либо зарегистрируйте его правильно в getDetails():

fun getDetails(): Unit {
    Log.i("Testings", "Employee details is $name whose profession is $profession and age is $age")
}

Или вернуть строку из getDetails():

fun getDetails(): String {
    return "Employee details is $name whose profession is $profession and age is $age"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...