小编HXC*_*ine的帖子

为什么三元运算符意外地转换整数?

我已经看到它在某处讨论过以下代码导致obj成为a Double,但它200.0从左侧打印.

Object obj = true ? new Integer(200) : new Double(0.0);

System.out.println(obj);
Run Code Online (Sandbox Code Playgroud)

结果:200.0


但是,如果您在右手边放一个不同的对象,例如BigDecimal,类型objInteger理所应当的.

Object obj = true ? new Integer(200) : new BigDecimal(0.0);

System.out.println(obj);
Run Code Online (Sandbox Code Playgroud)

结果:200


我认为这样做的原因是将左侧投射到a/与比较和计算double相同的方式,但这里左右两侧不会以这种方式相互作用.integerdouble

为什么会这样?

java casting ternary-operator conditional-operator

40
推荐指数
1
解决办法
3062
查看次数

如何处理Android中已弃用的类以保持兼容性

我正在重新开始研究我之前工作的应用程序,当时我已经围绕Android 2.2 Froyo构建了所有内容.

我已经更新了我的SDK以获取最新的API,并注意到我使用的ClipboardManager功能已被弃用.我更新了代码以使用较新的ClipData模型并在我的Froyo手机上试用了它,当然,我在新代码中得到了一个N​​oClassDefFoundError.

我已经浏览了一下,并没有找到任何关于保持向后兼容性的一般策略的真实讨论.

我不完全确定我应该如何处理这个以及API不同的其他情况,因为我希望所有版本的用户都能够使用我的应用程序.

我应该按如下方式进行检查吗?

if(version == old){
   use old API;
} else {
   use new API;
}
Run Code Online (Sandbox Code Playgroud)

如果是这样,我已经弃用了我的类中的代码,Eclipse将永远发出警告.

另一方面,我可以构建一个旧版本的API,并希望新版本可以正常处理它.但是当有更好的替代方案时,我冒着构建有缺陷或低性能代码的风险.

处理这个问题的最佳方法是什么?

compatibility android backwards-compatibility deprecated

30
推荐指数
2
解决办法
3万
查看次数

获取内核模块中的当前时间(秒)

在内核模块中以秒(自纪元开始)获取当前时间的标准方法是什么?

我已经看到了涉及获取xtime的技术,这些技术非常冗长且涉及while循环和锁定.肯定有更好的办法.

[这不是重复的.我已经查看了之前的问题.许多这些的答案要么没有指定使用的函数,要么错误地引用内核中不允许的time.h]

c time kernel-module linux-kernel

11
推荐指数
1
解决办法
2万
查看次数

使用自定义BaseAdapter从ListView中删除项目

我正在使用自定义的BaseAdapter在ListView上显示项目.这些项只是ArrayList中的字符串.

列表项上有一个删除按钮(大红色X),我想从ArrayList中删除该项,并通知ListView更新自己.

但是,我尝试的每个实现都会获得神秘的位置编号,因此例如单击项目2的删除按钮将删除项目5.它似乎几乎完全是随机的.

需要注意的一点是元素可能会重复,但必须保持相同的顺序.例如,我可以将"爱尔兰语"两次作为元素3和7.

我的代码如下:

private static class ViewHolder {
        TextView lang;
        int position;
}

public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = mInflater.inflate(R.layout.language_link_row, null);
        holder = new ViewHolder();
        holder.lang = (TextView)convertView.findViewById(R.id.language_link_text);
        holder.position = position;

        final ImageView deleteButton = (ImageView) 
                convertView.findViewById(R.id.language_link_cross_delete);
        deleteButton.setOnClickListener(this);

        convertView.setTag(holder);
        deleteButton.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.lang.setText(mLanguages.get(position));

    return convertView;
}
Run Code Online (Sandbox Code Playgroud)

我稍后尝试通过抓取标记来检索已删除元素的位置,但它始终是列表中的错误位置.这里给出的位置没有明显的模式,它似乎总是随机的.

// The delete button's listener
public void onClick(View v) {

    ViewHolder deleteHolder …
Run Code Online (Sandbox Code Playgroud)

android listview android-listview

8
推荐指数
1
解决办法
1万
查看次数

当从ListPreference中选择选项时,PreferenceActivity会给出NullPointerException

我是新手使用PreferenceActivity.

任务:允许用户从"首选项"中选择程序布局

问题:在PreferenceList中选择一个选项会导致NullPointerException

出现异常:在android.preference.ListPreference.onDialogClosed()

替代文字

(缩短)代码:

private static final String PREF_LAYOUT_KEY = "PrefLayout";
private static final int DEFAULT_LAYOUT = LayoutHelper.LAYOUT_DOUBLE ;
private static int mListLayout = DEFAULT_LAYOUT ;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
    pref.registerOnSharedPreferenceChangeListener(this);
    mListLayout = pref.getInt(PREF_LAYOUT_KEY, DEFAULT_LAYOUT);
}

@Override
public void onSharedPreferenceChanged(SharedPreferences pref,
        String key) {

    Log.v(TAG, "OnSharedPreferencesChanged run" ); // TODO Testing Purposes

    if( key.equals( PREF_LAYOUT_KEY ) ){
        mListLayout = pref.getInt(key, DEFAULT_LAYOUT);
    }
}
Run Code Online (Sandbox Code Playgroud)

[PreferenceActivity]

public class Preferences extends PreferenceActivity …
Run Code Online (Sandbox Code Playgroud)

android nullpointerexception android-preferences

7
推荐指数
2
解决办法
7990
查看次数