当前位置: 首页 > 知识库问答 >
问题:

从kotlin代码中移除getters和setters

卫兴邦
2023-03-14

对于此代码

class Foo {
    var name: String? = null
}

kotlin编译器生成:

private String name;
public final String getName() { ... }
public final void setName(String name) { ... }

即使属性name没有自定义getter或setter。可以使用@JvmField注释删除冗余的get和set方法。所以这段代码

class Foo {
    @JvmField
    var name: String? = null
}

仅生成一个字段,无需其他方法。

public String name;

但是有没有办法让kotlin编译器不为整个项目中的所有属性生成getter和setter?不管它是否有注释。也许是一些实验性编译器标志?

我想要它是因为我在kotlin上编写了android仪器测试。测试apk超过65k方法计数限制。大约有2k个方法是由getter/setter生成的。由于android构建系统中存在一些错误,我无法使用proguard或multidex。所以用合成方法去除kotlin对我有很大帮助。

共有1个答案

何升
2023-03-14

您可以简单地将属性声明为<code>private</code>,这样就不会生成getter和setter。

class Foo {
  private val foo: String = "foo"
}

这将生成以下类:

→ javap -classpath build/classes/kotlin/test -p test.Foo
Compiled from "Foo.kt"
public final class test.Foo {
  private final java.lang.String foo;
  public test.Foo();
}
 类似资料:
  • 大家早上好。我有以下代码: 问题是,uri变量被分配给RestTemplate构造函数为,也就是说,它从代码变量中删除初始的。

  • 我正在spring boot创建我的API。我认为一个产品是由以下部件组成的: 这里是我的代码:(实体层) } 下面是我的Controller类: } 我的问题: 在实体类“Product”中,对于类型为List的productComponents变量,getter和setter应该如上面所述,还是应该如下所示: 并将controller类中的update方法更改为: 还是有更好的解决方案?

  • 问题内容: 似乎每次我想执行数据库查询时,我都必须编写以下内容: 这真的是最好的方法吗?有没有办法至少减少一些混乱? 编辑:作为一些评论指出的那样,这个代码不长 不够 。 问题答案: 如果您已经有一个数据源,则可以将Spring JdbcTemplate 用于: 大大减少了样板代码 具有良好的sql异常层次结构,可以处理具有特定运行时异常的常见数据库问题 (随后在Spring中进一步使用)使用声明

  • 是否有类似的删除子记录的问题,但没有使用OlphanRemovation注释? 下面是我在模型类构造函数中的代码示例: cascade=arrayOf(CascadeType.All)的CRUD工作正常,但当将OlphanRemove=true添加到“一对多”注释中时,它无法继续工作,并抛出如下所示的异常: org.hibernate.hibernateException:cascade=“all

  • 我有一个生成PDF文件的系统,每个文件由两页组成。出于某种原因,我需要编写一个PHP代码,可以从每个PDF文件中删除第二页。以下是我所做的以及结果: 1-我使用TCPDF库编写了以下代码: 结果:空白一页PDF文件。换句话说原始文件中的内容在新文件中不可用 2-我使用FPDF和FPDI库从原始文件中只读取一页。 结果是出现以下错误消息: 带有消息的未捕获异常异常此文档(test.pdf)可能使用了

  • 这是我一开始的消息来源。 我的名单 如何在不移除0值的情况下从列表中移除None值?