Spring在kotlin中注入通用接口实现列表

免责声明:Kotlin新手,可能是一个容易解决的问题或误解的基础知识。 我正在试图注入一个特定的接口的Spring实现列表,在一个普通的Java类中,这很容易,就像这样: @Autowired List myClassList; 但是在Kotlin做以下给我一个错误 @Autowired lateinit private var myClassList: List<IMyClass> // No beans of ‘? extends IMyClass’ or ‘List<? extends IMyClass>’ types found 这样做: @Autowired lateinit private var myClassList: List<IMyClass> 使注入工作,但不允许我使用接口中定义的函数,该函数将通用对象作为输入 // Out-projected type ‘IMyClass’ prohibits the use of ‘public abstract fun myFunction(obj: T!): T! defined in com.path.IMyClass’ 那么我该如何解决呢? 用一些特定的syntac来重写Kotlin中的接口更容易吗?

字段的安装程序通过types投影来删除

我有以下的SSCCE: class Foo(val bars: Map<Int, Bar>) { fun qux(baz: Baz) { val bar2 = bars[2]!! bar2.bazes += baz } interface Bar { var bazes: MutableList } } 这对我来说似乎很好,但编译器抱怨: Error:(5, 9) Kotlin: Setter for ‘bazes’ is removed by type projection 我不知道这意味着什么,更不用说如何纠正它。 这里发生了什么,如何解决这个问题?

Android Studio 3.0.1错误:Gradle项目同步失败。 基本function(如编辑,调试)将无法正常工作

我已经安装了Android Studio 3.0.1,并试图通过选择一个空的活动来构建第一个应用程序,但我得到的消息是: Gradle项目同步失败。 基本function(如编辑,调试)将无法正常工作 和这样的错误信息: 无法解析“:app @ releaseUnitTest / compileClasspath”的依赖关系:无法解析com.android.support:appcompat-v7:26.1.0。 无法解析com.android.support:appcompat-v7:26.1.0。 必需:project:app无法解析com.android.support:appcompat-v7:26.1.0。 无法解析POM https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/26.1.0/appcompat-v7-26.1.0.pom已经看过文档types。 这是日志消息的第一部分是: 2018-01-03 11:11:12,671 [d线程8] WARN – ect.sync.idea.ProjectSetUpTask – 已经看过doctype。 请参阅IDE日志以获取更多详细信息(帮助|显示日志)2018-01-03 11:11:12,671 [d线程8]信息 – e.project.sync.GradleSyncState – Gradle同步失败:已经看到doctype。 我已经尝试了一些建议的解决方案,如更改gradle版本,更新Kotlin插件(!)等,但他们没有工作。 任何解决方案

RxJava推迟了可观察到的火灾

我有一个使用RxJava observables设置的事件序列。 基本上,我使用observable.delay(time, timeUnit, scheduler)函数合并了由Observable.just(Events.*)创建的不同延迟创建的不同事件。 然后将它们发布到PublishSubject (下面的代码中的events )并订阅该PublishSubject以观察下面的代码中的序列( observeEvents()函数)。 它曾经工作得很好,但最近我在我的设备上看到了一个非常奇怪的行为(OnePlus One与android 5.0.2)(并没有在模拟器上看到它)。 基本上事件会混淆起来,延迟较高的事件可能会在延迟较小的事件之前发生,延迟较小的事件可能会发生在队列的末尾,有时候所有的事件都会以正确的顺序出现。 前三个赛事经常混合在一起。 有时候根本没有观察到一些事件。 这里会发生什么? 代码在Kotlin: var computationScheduler = Schedulers.computation() private val events: PublishSubject = PublishSubject.create() private val userActionSubject: PublishSubject = PublishSubject.create() Observable.merge( event0(), event1(), event2(), userActionOrEvent3(), userActionOrEvent4()) .subscribe({ // Weird timings are observed here already events.onNext(it) }, { e -> events.onError(e) })) private […]

Recycler中的checkbox勾选为true时,查看项目被immedietaly选中为false

我使用RxJava2,Kotlin和Room作为例子。 以下是将我的项目填充到recyclerView的适配器: class ShoppingListDetailsAdapter(val list: ArrayList, val context: Context, val listener: ShoppingItemCheckboxListener, val isArchived: Boolean) : RecyclerView.Adapter() { override fun getItemCount(): Int { return list.count() } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): ViewHolder { val itemView = LayoutInflater.from(parent?.getContext()) .inflate(R.layout.item_shopping_list_element, parent, false) return ViewHolder(itemView) } override fun onBindViewHolder(holder: ViewHolder?, position: Int) { val item = list.get(position) […]

导航抽屉:从左边缓慢滑动时,停止拖动菜单

如果我从左边快速滑动,这不会发生。 但是,如果我从左边缓慢滑动,经常(但不是总是)拖动停止,并且抽屉菜单不响应进一步的滑动。 我曾尝试使用其他Google应用,例如Google图书,Google地图或Play商店,但他们没有这个问题。 起初,我以为我做错了什么。 但是我创建了一个新的项目,并选择了主要的活动types作为“导航抽屉活动”,并重现了这个问题。 除了更改SDK /工具/库版本之外,我没有修改生成的项目。 我怎么解决这个问题? 我没有附加源代码,因为它是在Android Studio中复制的模板项目。 以下是我的版本/配置。 Android Studio 3.0.1 科特林 编译SDK 27 目标SDK 27 构建工具27.0.3 支持版本“27. +”

Android Studio只创建“空白活动”项目

今天突然之间,Android Studio将创建除“空白活动”项目之外的任何新项目。 我卸载并重新安装了AS,但没有运气。 以下是“基本活动”项目的屏幕截图。 有什么建议么? 您可以在下面看到消息标签: 信息:Gradle任务[:app:generateDebugSources,:app:generateDebugAndroidTestSources,:app:mockableAndroidJar] D:\ Programming \ Kotlin \ Test \ MyApplication \ app \ build \ intermediates \ manifests \ full \ debug \ AndroidManifest.xml错误:(19 )错误:找不到资源样式/ AppTheme.NoActionBar(aka com.gmail.mosestak.myapplication:style / AppTheme.NoActionBar)。 错误:(19)resource style / AppTheme.NoActionBar(aka com.gmail.mosestak.myapplication:style / AppTheme.NoActionBar)找不到。 错误:处理清单失败。 错误:java.util.concurrent.ExecutionException:java.util.concurrent.ExecutionException:com.android.tools.aapt2.Aapt2Exception:AAPT2错误:检查日志以获取详细信息错误:java.util.concurrent.ExecutionException:com.android.tools .aapt2.Aapt2Exception:AAPT2错误:检查日志以获取详细信息错误:com.android.tools.aapt2.Aapt2Exception:AAPT2错误:检查日志以获取详细信息错误:执行任务失败:app:processDebugResources。 无法执行aapt信息:46s内出现故障信息:7个错误信息:0个警告信息:请参阅控制台中的完整输出

call.enqueue正在阻塞第一个请求

我在Kotlin编写的Android应用程序中使用Retrofit 2来调用API。 我的电话如下所示: val time = measureTimeMillis { val call = geocodingApi.searchByName(“Berlin”) call.enqueue(object : Callback { override fun onResponse(call: Call?, response: Response?) { // some code } override fun onFailure(call: Call?, t: Throwable?) { // some code } }) } Timber.d(“searching by name took $time ms”) geocodingApi在我的类的构造函数中初始化如下: val loggingInterceptor = HttpLoggingInterceptor(HttpLoggingInterceptor.Logger { Timber.d(it) }) loggingInterceptor.level […]

如何正确更新ViewPager的最后一个片段,当点击标签?

问题描述: 我有一个ViewPager有四个碎片, 第一个和最后一个对他们有一个RecyclerView; 当我滚动ViewPager时,一切正常 – 这意味着,所有内容按预期加载; 如果我点击最后/第一个选项卡(其中包含RecyclerViews,并由三个片段分隔),RecyclerView内容不显示在屏幕上 – 所有其他UI组件,如FloatingActionButtons; 我环顾四周,但与此主题相关的所有其他问题似乎只解决了滚动的问题,我无法find任何与特定点击标签相关的任何内容。 PS:代码写在Kotlin 码 从一个活动调用,以封装与标签管理器相关的代码: class TabManager { companion object { val INVALID_POSITION_LABEL = “Invalid Position” } private var mActivity: AppCompatActivity? = null private var mViewPagerTab: SmartTabLayout? = null private var mViewPager: ViewPager? = null // PUBLIC INTERFACE ============================================================================ fun initViewPager(activity: AppCompatActivity) { mActivity = activity mViewPager […]

SearchView不会在第二个点上调用onQueryTextChange

我的活动有SearchView,应该过滤查询。 我通过onQueryTextListener过滤它。 想法是禁用键入不允许字符,如点,逗号,斜杠等 – 只允许[AZ]这里是代码(我正在使用Kotlin,但它是可读的Java): var shouldQueryChangeBeInvoked = true override fun onCreate(savedInstanceState: Bundle?) { … searchField.setOnQueryTextListener(this) } override fun setSearchQuery(query: String) { shouldQueryChangeBeInvoked = false searchField.setQuery(query, false) shouldQueryChangeBeInvoked = true } override fun onQueryTextChange(newText: String?): Boolean { if (!shouldQueryChangeBeInvoked) { return false } val validQuery = validateQuery(newText) validQuery?.let { setSearchQuery(it) } return false } 例如,我输入“ABC”。 […]