Как вызвать ссылку на метод в карте

#kotlin #spring-webflux

Вопрос:

Я создаю класс ApUtils . Определите два метода в этом классе . Я хочу использовать эти два метода в своем классе обслуживания внутри функции map с помощью ссылки на метод ,но я получаю не исключенную ошибку при вызове этих двух методов service.kt

 package com.nilmani.reactivespringdemo.services

import com.nilmani.reactivespringdemo.Utils.AppUtils
import com.nilmani.reactivespringdemo.dto.ProductDto
import com.nilmani.reactivespringdemo.entity.Product
import com.nilmani.reactivespringdemo.repository.ProductRepository
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
import reactor.core.publisher.Flux
import reactor.core.publisher.Mono


@Service
class ProductService {
    @Autowired
    private lateinit var productRepository: ProductRepository
    fun getProduct():Flux<ProductDto>{
        return productRepository.findAll().map(obj: AppUtils -> obj.entityToDto(product))
    }
    fun getProduct(id:String):Mono<ProductDto>{
        return productRepository.findById(id).map{ obj: AppUtils, product: Product -> obj.entityToDto(product) }
    }
}
 

Приложения.кт

 package com.nilmani.reactivespringdemo.Utils

import com.nilmani.reactivespringdemo.dto.ProductDto
import com.nilmani.reactivespringdemo.entity.Product
import org.springframework.beans.BeanUtils

class AppUtils {
    fun entityToDto(product: Product):ProductDto{
        val productDto = ProductDto()
        BeanUtils.copyProperties(product,productDto)
        return productDto
    }
    fun dtoToEntity(productDto: ProductDto):Product{
        val product = Product()
        BeanUtils.copyProperties(productDto,product)
        return product
    }
}
 

Как вызвать эти две функции в моем классе обслуживания, используя ссылку на метод

Ответ №1:

Если вы перейдете AppUtils на синглтон, используя object ключевое слово Kotlin:

 object AppUtils { ... }
 

затем вы можете использовать ссылки на методы, например:

 fun getProduct(id:String) = productRepository.findById(id).map(AppUtils::entityToDto)