我使用的是用来发送邮箱的Mailgan Java API.邮件构建器上有一个.to方法,您可以使用它来填充收件人的详细信息.然而,当我try 使用它时,它告诉我有一个编译错误,因为它假设我正在try 使用创建对的.to函数.

我从以下几个方面开始:

Message.builder()
    .from(emailAddress)
    .subject(subject)
    .attachment(File("/path/to/file"))
    .to(recipient)
    .build()

它告诉我.build()是一个未解析的引用,当我将鼠标悬停在.to上时,它显示

public infix fun <A, B> A.to(
    that: B
): Pair<A, B>

作为它正在使用的功能.我try 指定.`to`(recipient)以绕过此问题,并try 查看是否可以导入该方法,但这是不可能的,我按照它的提示删除了它

无法导入‘to’,只能从包或对象导入函数和属性

我还try 创建一个扩展函数,但它无法访问MessageBuilder的私有to属性,因此这似乎是不可能的.

推荐答案

只要为recipient传递正确类型的值,就会调用MessageBuilder will中的to函数,而不是创建对的标准库函数.成员函数优先于扩展函数.

如果您的代码似乎错误地使用了构建Pair的标准库to函数,这可能意味着您的recipient值是错误的类型.当有多个函数可供 Select 时,通过查看其参数的编译类型来解决重载问题.

例如,这不起作用,因为MessageBuilder.to函数不接受类型Any的参数:

val recipient: Any = "hello@example.com"
Message.builder()
    .to(recipient) // picks the wrong function
    .build()       // doesn't compile

但是传递String可以让编译器 Select 正确的函数.

val recipient: String = "hello@example.com"
Message.builder()
    .to(recipient)
    .build()

Java相关问答推荐

获取拦截器内部的IP地址

如何在Java中声明未使用的变量?

Intellij显示项目语言级别最高为12,尽管有java版本17 SDK

连接Quarkus中的两个异步操作

无法初始化JPA实体管理器工厂:无法确定为Java类型<;类>;推荐的JdbcType

Mapstruct不能正确/完全映射属性

Helidon 4和Http API

Spring和可编辑";where";@Query

OpenGL ES 3.0-纹理黑色

MimeMessage emlMessage=new MimeMessage(Session,emlInputStream);抛出InvocationTargetException

Sack()步骤中的合并运算符未按预期工作

在添加AdMob时无法为Google Play构建应用程序包:JVM垃圾收集器崩溃和JVM内存耗尽

如何在构建Gradle项目时排除com.google.guava依赖项的一个变体

在Java 15应用程序中运行Java脚本和Python代码

垃圾收集时间长,会丢弃网络连接,但不会在Kubernetes中反弹Pod

如何用内置Java从JavaFX应用程序中生成.exe文件?

Spring Boot中的应用程序.properties文件中未使用的属性

如何在盒子的顶部和底部创建两张不同图片(大小相同)的盒子?

在JDK Flight Recorder中只记录单个线程

如何使用我的RLE程序解决此问题