如何避免Kotlin中同名冲突的types?

我对kotlin非常陌生,而且我正在从一本书建立的应用程序中遇到一些麻烦。 我有两个名为预测单独的包中的类,我试图定义一些函数在一个使用其中同名的类包。 该书说导入Forecast类作为ModelForecast,我做了,但现在我有一个问题追踪这种types的不匹配错误的来源。 看来我的convertForecastListToDomain()方法正在期待其他的东西? 请帮我find我正在犯的错误。 如果这件事很简单,我不会感到惊讶,但我仍然无法find它。

MainActivity.kt:

package com.example.zacharymcdaniel.weatherkot import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.RecyclerView import com.example.zacharymcdaniel.weatherkot.domain.Forecast import org.jetbrains.anko.find class MainActivity : AppCompatActivity() { private val url: String = "http://openweathermap.org/" private val items = listOf( "Mon 6/23 - Sunny - 31/17", "Tue 6/24 - Foggy - 21/8", "Wed 6/25 - Cloudy - 22/17", "Thur 6/26 - Rainy - 18/11", "Fri 6/27 - Foggy - 21/10", "Sat 6/28 - TRAPPED IN WEATHER STATION - 23/18", "Sun 6/29 - Sunny - 20/7" ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val forecastList: RecyclerView = find(R.id.forecast_list) forecastList.layoutManager = LinearLayoutManager(this) forecastList.adapter = ForecastListAdapter(items) } } data class ForecastResult(val city: City, val list: List) data class City(val id: Long, val name: String, val coord: Coordinates, val country: String, val population: Int) data class Coordinates(val ion: Float, val lat: Float) data class Forecast(val dt: Long, val temp: Tempurature, val pressure: Float, val humidity: Int, val weather: List, val speed: Float, val deg: Int, val clouds: Int, val rain: Float) //<----this is supposed to be Forecast in second page data class Tempurature(val day: Float, val min: Float, val max: Float, val night: Float, val eve: Float, val morn: Float) data class Weather(val id: Long, val main: String, val desciption: String, val icon: String) 

域包中的domain.kt:

 package com.example.zacharymcdaniel.weatherkot.domain import com.example.zacharymcdaniel.weatherkot.Forecast import com.example.zacharymcdaniel.weatherkot.ForecastResult import java.text.DateFormat import java.util.* import com.example.zacharymcdaniel.weatherkot.domain.Forecast as ModelForecast public interface Command{ fun execute(): T } data class ForecastList(val city: String, val country: String, val dailyForecast: List) data class Forecast(val date: String, val description: String, val high: Int, val low: Int) public class ForecastdataMapper{ private fun convertFromDataModel(forecast: ForecastResult): ForecastList { return ForecastList(forecast.city.name, forecast.city.country, convertForecastListToDomain(forecast.list)) //<---wrong type found here (forecast.list is indicated) } private fun convertForecastListToDomain(list: List): List{ return list.map { convertForecastItemToDomain(it) } } private fun convertForecastItemToDomain(forecast: Forecast): ModelForecast{ return ModelForecast(convertDate(forecast.dt), forecast.weather[0].desciption, forecast.temp.max.toInt(), forecast.temp.min.toInt()) } private fun convertDate(date: Long): String{ val df = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.getDefault()) return df.format(date * 1000) } } 

谢谢您的帮助

你应该从第一个页面中删除import statement ,在第二个页面中使用domain.Forecast ,而不是你自己的Forecast

 import com.example.zacharymcdaniel.weatherkot.domain.Forecast // ^--- remove it from your source code 

或者使用typealias来重命名它,例如:

 typealias DomainForecast = com.example.zacharymcdaniel.weatherkot.domain.Forecast 

或者使用alias import statement重命名它,例如:

 import com.example.zacharymcdaniel.weatherkot.domain.Forecast as DomainForecast