【问题标题】:Java class uses unchecked or unsafe operations [duplicate]Java类使用未经检查或不安全的操作[重复]
【发布时间】:2016-05-13 16:21:07
【问题描述】:

我有一个名为 LB_Adapter.java 的类来帮助在 ListView 中显示我的数据库。我的程序的所有功能都可以正常工作,但每次编译时我仍然会收到警告错误

Note: Project/LB_Adapter.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

通过谷歌搜索,我了解到错误来自我的 ArrayList,但我尝试实现 ArrayList(),但它不起作用。有没有办法摆脱这个错误,或者它是否重要,因为它不影响任何东西?

相关代码:

public class LB_Adapter extends ArrayAdapter<Object> {
List<Object> list = new ArrayList<>();

public LB_Adapter(Context context, int resource){
    super(context, resource);
}

public void add(LB object){
    list.add(object);
    super.add(object);
}

@Override
public int getCount(){
    return list.size();
}

@Override
public Object getItem(int position){
    return list.get(position);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    LBHolder lbholder;

    if(row==null){
        LayoutInflater layoutinflater = (LayoutInflater) this.getContext().getSystemService(getContext().LAYOUT_INFLATER_SERVICE);
        row = layoutinflater.inflate(R.layout.display_leaderboard_row, parent, false);
        lbholder = new LBHolder();
        lbholder.lb_rank = (TextView) row.findViewById(R.id.lb_rank);
        lbholder.lb_score = (TextView) row.findViewById(R.id.lb_score);
        lbholder.lb_time = (TextView) row.findViewById(R.id.lb_time);
        row.setTag(lbholder);
    }
    else {
        lbholder = (LBHolder) row.getTag();
    }
    LB leaderboard = (LB) getItem(position);
    lbholder.lb_rank.setText(leaderboard.getRank().toString());
    lbholder.lb_score.setText(Integer.toString(leaderboard.getScore()));
    lbholder.lb_time.setText(leaderboard.getTime().toString());

    return row;
}

static class LBHolder{
    TextView lb_rank, lb_score, lb_time;
}
}

【问题讨论】:

  • 您是否尝试使用-Xlint 重新编译以获得更多详细信息?你为什么要使用原始类型?
  • 要做到这一点,我只需在终端中输入 javac project -Xlint ?另外,不确定原始类型,我使用教程来获取此代码。
  • 我对编译感到困惑的原因是这是一个带有Android Studios的程序,所以它不仅仅是一个简单的java程序,它涉及到gradle和其他东西
  • 我强烈怀疑有一种方法可以在小时构建配置中使用 Xlint。我建议你研究一下。

标签: java android generics javac


【解决方案1】:

自 Java 5 中引入泛型以来,不鼓励使用原始类型。您应该只为您正在使用的 ArrayAdapterArrayList 键入参数:

public class LB_Adapter extends ArrayAdapter<LB> {
    // Here --------------------------------^

    // And here:
    List<LB> list = new ArrayList<>();

    public LB_Adapter(Context context, int resource){
        super(context, resource);
    }

    public void add(LB object){
        list.add(object);
        super.add(object);
    }
}

【讨论】:

  • 我发布了更多我的课程。当我放 时,我的公共对象 getItem(int position) 方法出现错误(请参阅编辑)。我将其更改为 并构建了 apk,并且没有更多错误。您认为这是解决错误的推荐方法吗?
  • @Milap no - getItem 应该在您的用例中使用 LB
  • 好的。它也以这种方式编译而没有错误。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多