Java - Массив списка класса stati c возвращает всегда одинаковые значения - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь заполнить список c массивов. Функция RTTWifiPositionsToJava используется из Unity (C#) для передачи параметров для каждой позиции WifiPosition. Но каждый элемент списка m_RTTWifiPositions имеет то же значение, что и последнее добавленное значение.
Может кто-нибудь помочь, пожалуйста, спасибо:)

static class RTTWifiPos
{  
    static String strMacAddress;
    static double posX, posY, posZ;
    static double distance; 
    static double distanceDev;
}

static List<RTTWifiPos> m_RTTWifiPositions;

public static boolean RTTWifiPositionsToJava(int nIndex, String strMacAddress, double PosX, double PosY, double PosZ, double distance, double distanceStdDev)
{  
    if(nIndex == 0)
    {
       if(m_RTTWifiPositions != null)  
            m_RTTWifiPositions.clear();
       else
            m_RTTWifiPositions = new ArrayList<RTTWifiPos>();
    }
    RTTWifiPos rttpos = new RTTWifiPos();

    rttpos.strMacAddress = strMacAddress;
    rttpos.posX = PosX;
    rttpos.posY = PosY;
    rttpos.posZ = PosZ;
    rttpos.distance = distance;
    rttpos.distanceDev = distanceStdDev;

    m_RTTWifiPositions.add(rttpos);

    return true;
}

Функция RTTWifiPositionsToJava вызывается из Unity3D так:

for (nIndex = 0; nIndex < WifiRTTSignals.Count; nIndex++)
{
    result = m_pluginWifiRTTClass.CallStatic<bool>("RTTWifiPositionsToJava", nIndex, WifiRTTSignals[nIndex].macAddress, (double) WifiRTTSignals[nIndex].pos.x, (double) WifiRTTSignals[nIndex].pos.y, (double) WifiRTTSignals[nIndex].pos.z, (double) WifiRTTSignals[nIndex].distance, (double) 0f);
}

1 Ответ

0 голосов
/ 31 января 2020

Переменные в RTTWifiPos всегда будут одинаковыми, потому что они статичны c. Переменные Stati c всегда будут иметь одно и то же значение независимо от объектов объяснение . Пример:

static class RTTWifiPos
{  
    String strMacAddress;
    double posX, posY, posZ;
    double distance; 
    double distanceDev;
}

Я бы также сделал их приватными, используя вместо этого методы getter / setter для лучшего контроля .

...