简体   繁体   English

将 Kotlin 转换为 Java 时方法错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM