【发布时间】:2021-03-21 03:26:14
【问题描述】:
public class C {
public static string a;
public static string b;
public C(String a, String b){
this.a=a;
this.b=b;
}
public void addString(){
String result=a+b;
}
public static JSONObjet functionA(){
JSONObject jsonobject = new JSONObject();
try {
jsonobject.put(key1, a);
jsonobject.put(key2,b);
} catch(JsonException e){
******}
return jsonobject;}}
如果把参数放在init{}之前,那么functionA()就不能识别a和b。如果将参数放入伴随对象{}中,init 将无法识别 a 和 b。如何将此类转换为 kotlin?你有什么建议?
Class C{
fun addString(){
var result:String=a+b
}
init {
this.a=a
this.b=b
}
companion object {
var a:String?=null
var b:String?=null
@JVMStatic
fun functionA(): JSONObject?{
var jsonobject = JSONObject()
try {
jsonobject.put(key1, a)
jsonobject.put(key2,b)
} catch(JsonException e){
******}
return jsonobject
}}}
【问题讨论】:
-
Java 类本身有一种奇怪的设计。为什么类的每个任意实例都会覆盖相同的静态成员并且不携带自己的状态?
-
你的实现问题不在于初始化的顺序。这是因为您的类没有显式构造函数,因此您没有可用于设置静态成员的变量。此外,您需要使用
Companion.a而不是this.a。 -
嗨,tenfour04,fun addString() 只是一个普通的方法示例,需要用到这两个静态参数。这个类有两个静态参数,几个非静态方法需要调用这两个静态参数。需要调用这两个静态参数的一种静态方法。还有一个构造函数。
-
嗨,tenfour04,非常感谢您的建议。我会试试 Companion.a 和 Companion.b 看看。稍后更新,谢谢
-
我的意思是为什么类会覆盖静态成员?现在,类的任何实例都不能保证静态成员是什么。它们可以是最近通过的实例。那么,如果它们与特定实例无关,为什么要首先通过构造函数传递它们呢?
标签: kotlin static-variables static-functions