[英]Wrong approach when converting Kotlin to Java
I'm trying to convert the following code to Java:我正在尝试将以下代码转换为 Java:
import android.location.Location
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.SystemClock
import com.google.android.gms.location.FusedLocationProviderClient
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var locationProvider = FusedLocationProviderClient(this)
locationProvider.setMockMode(true)
val loc = Location("gps")
val mockLocation = Location("gps") // a string
mockLocation.latitude = 48.8566 // double
mockLocation.longitude = 2.3522
mockLocation.altitude = loc.altitude
mockLocation.time = System.currentTimeMillis()
mockLocation.accuracy = 1f
mockLocation.elapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mockLocation.bearingAccuracyDegrees = 0.1f
mockLocation.verticalAccuracyMeters = 0.1f
mockLocation.speedAccuracyMetersPerSecond = 0.01f
}
locationProvider.setMockLocation(mockLocation)
}
}
(As you can see, this code is supposed to mock an Android device's location) (如您所见,此代码应该模拟 Android 设备的位置)
Here's what I tried in Java:这是我在 Java 中尝试过的:
import androidx.appcompat.app.AppCompatActivity;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import android.location.Location;
import com.google.android.gms.location.FusedLocationProviderClient;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FusedLocationProviderClient locationProvider = FusedLocationProviderClient(this);
locationProvider.setMockMode(true);
Location loc = Location("gps");
Location mockLocation = Location("gps"); // a string
mockLocation.latitude = 48.8566; // double
mockLocation.longitude = 2.3522;
mockLocation.altitude = loc.altitude;
mockLocation.time = System.currentTimeMillis();
mockLocation.accuracy = 1f;
mockLocation.elapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mockLocation.bearingAccuracyDegrees = 0.1f;
mockLocation.verticalAccuracyMeters = 0.1f;
mockLocation.speedAccuracyMetersPerSecond = 0.01f;
}
locationProvider.setMockLocation(mockLocation);
}
}
Unfortunately, the Java version is full of errors.不幸的是,Java 版本充满了错误。 How can I convert that Kotlin code to Java successfully?如何将 Kotlin 代码成功转换为 Java? Please do tell me how to convert it.请告诉我如何转换它。 Thank you.谢谢你。 I appreciate your time.我很感激你的时间。
You're missing the new
keyword before each constructor call.在每个构造函数调用之前,您都缺少new
关键字。 For example,例如,
Location loc = Location("gps");
should be应该
Location loc = new Location("gps");
And for class properties, you need to use getter and setter method calls instead.对于 class 属性,您需要改用 getter 和 setter 方法调用。 So for instance所以例如
mockLocation.latitude = 48.8566;
should be应该
mockLocation.setLatitude(48.8566);
and和
mockLocation.altitude = loc.altitude;
should be应该
mockLocation.setAltitude(loc.getAltitude());
Based on the previous answer, here is the errorless version of the code that you want根据上一个答案,这是您想要的代码的无错误版本
import androidx.appcompat.app.AppCompatActivity;
import android.os.Build;
import android.os.Bundle;
import android.os.SystemClock;
import android.location.Location;
import com.google.android.gms.location.FusedLocationProviderClient;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FusedLocationProviderClient locationProvider = new FusedLocationProviderClient(this);
locationProvider.setMockMode(true);
Location loc = new Location("gps");
Location mockLocation = new Location("gps"); // a string
mockLocation.setLatitude(48.8566); // double
mockLocation.setLongitude(2.3522);
mockLocation.setAltitude(loc.getAltitude());
mockLocation.setTime(System.currentTimeMillis());
mockLocation.setAccuracy(1f);
mockLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mockLocation.setBearingAccuracyDegrees(0.1f);
mockLocation.setVerticalAccuracyMeters(0.1f);
mockLocation.setSpeedAccuracyMetersPerSecond(0.01f);
}
locationProvider.setMockLocation(mockLocation);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.