java - 强制变量始终为 'long' 类型

标签 java android long-integer classcastexception

我必须保存用户 ID 这么久。我想强制将用户 ID 保存在长类型的首选项中。问题是如果服务器分配我 22 作为整数类型的用户 ID。我将其传递给保存偏好。由于数字长度较短,因此它保存在 putInt 方法下。如果我检索它,它会说整数不能转换为长整型。下面是我的 prefrence util 类中保存用户 ID 的重载方法。

public int read(String valueKey, int valueDefault) {
    return mPreferences.getInt(valueKey, valueDefault);
}

public void save(String valueKey, int value) {
    mEditor.putInt(valueKey, value);
    mEditor.commit();
} 

public long read(String valueKey, long valueDefault) {
    return mPreferences.getLong(valueKey, valueDefault);
}

public void save(String valueKey, long value) {
    mEditor.putLong(valueKey, value);
    mEditor.commit();
}

我想保存用户 ID 并同样检索它。它的作用是,由于数字长度的原因,它预测用户 id 为整数,并将其保存在 put mEditor.putInt(valueKey, value); 下..希望你能理解这种挫败感。我能想到的可能的解决方案是,不要将值传递给这些方法。我只是使用 putLong 方法显式保存用户 ID ..或者还有其他解决方案吗?

最佳答案

您可以使用枚举而不是纯 String 对象:

enum MyProperties{
  USER_ID{
    void save(long value, WhatEverTypeThisIs mEditor){
       mEditor.putLong(valueKey, longVal);
       mEditor.commit();
    }   
    long get( WhatEverOtherTypeThisIs mPreferences){
       return mPreferences.getLong(name(), valueDefault);
    }   
  },
  INT_PROPERTY{
    void save(long value, WhatEverTypeThisIs mEditor){
       mEditor.putInt(valueKey,(int) longVal);
       mEditor.commit();
    }   
    //needs cast to int at caller side
    long get( WhatEverOtherTypeThisIs mPreferences){
       return mPreferences.getInt(name(), valueDefault); 
    }   
 }; 
 abstract void save(long value, WhatEverTypeThisIs mEditor);
 abstract long get( WhatEverOtherTypeThisIs mPreferences);
}

用途:

   MyProperties.USER_ID.save(22,mEditor);
   long id22 = MyProperties.USER_ID.get(mPreferences);
   MyProperties.INT_PROPERTY.save(23,mEditor);
   int somValue23 = (int)MyProperties.INT_PROPERTY.get(mPreferences);

关于java - 强制变量始终为 'long' 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42186038/

相关文章:

java - 在 javadoc 中为每个单元格添加带边框的表

java - 无法使用hibernate保存子表数据

java - Android ListView : Do Not Show TextView When Null

android - 如何使用此异步函数的回调参数来知道我的函数何时完成执行?

java - double 到 long 无需在 Java 中进行转换

C:为什么整数充当长整数?

java - Scala 是否对小型集合使用特殊实现?

Android:保存新图像后刷新图库

ios - 无法将 _NSCFNumber 转换为 int

java - 如何将字符串分成字符数组