【问题标题】:Can't import Arraylist from two classes...what now?无法从两个类中导入 Arraylist……现在怎么办?
【发布时间】:2023-03-09 16:51:01
【问题描述】:

我是 Java 新手,发现有点晚了,我无法从多个类中导入 ArrayList

只用一个类 (BlackLabel) 构建它,CustomAdapter 工作正常。现在我想添加第二个品牌(Castle),但我发现我只能导入一个静态。也许你们可以这么好心,帮助我用另一种方式添加多个品牌来使用同一个适配器。

这是我的适配器:(只是开始)

import static com.example.android.sab.BlackLabel.modelArrayList;
//import static com.example.android.sab.CastleLager.modelArrayList;

/**
* Created by Carel on 2017/08/15.
*/
public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {

   private LayoutInflater inflater;
   private Context ctx;

   public CustomAdapter(Context ctx) {
      inflater = LayoutInflater.from(ctx);
      this.ctx = ctx;
   }

   @Override
   public CustomAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
      View view = inflater.inflate(R.layout.rv_item, parent, false);
      MyViewHolder holder = new MyViewHolder(view);

      return holder;
   }

   @Override
   public void onBindViewHolder(final CustomAdapter.MyViewHolder holder, int position) {
      holder.tvBrand.setText((CharSequence) modelArrayList.get(position).getBrand());
      holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber()));
      holder.tvPallet_size.setText(String.valueOf(modelArrayList.get(position).getPallet_size()));
      holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber2()));
      holder.tvPallets.setText(String.valueOf(modelArrayList.get(position).getNumber()));
      holder.tvCases.setText(String.valueOf(modelArrayList.get(position).getNumber2()));
   }

这是 BlackLabel cass,它是第一个:

import java.util.ArrayList;
//import static com.example.android.sab.CastleLager.modelArrayList;

public class BlackLabel extends brands {
   private RecyclerView recyclerView;
   //private String modelArrayList;
   //private Context ctx;
   public static ArrayList<Model> modelArrayList;
   private CustomAdapter customAdapter;
   //private Button btnnext;

   public String[] brandlist = new String[] {
      "Black Label 340ml NRB (85023)",
      "Black Label 330ml Cans (85736)",
      "Black label 500ml Cans (85023)",
      "Black Label 440ml NRB (86798)",
      "Black Label 330ml RB (85556)",
      "Black Label 750ml RB (85021)",
      "Black Label 340ml NRB 12 Pack (87009)",
      "Black Label 500ml Cans 12 Pack (85022)"
   };

   public int[] pallet_size = {84, 127, 81, 80, 120, 70, 132, 90};
   //int palletsize = Integer.parseInt(String.valueOf(pallet_size));

   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.order_by_brand);
      setTitle("Black Label");
      recyclerView = (RecyclerView) findViewById(R.id.recycler);
      //btnnext = (Button) findViewById(R.id.next);
      modelArrayList = getModel();
      customAdapter = new CustomAdapter(this);
      recyclerView.setAdapter(customAdapter);
      recyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false));
   }

   private ArrayList<Model> getModel() {
      ArrayList<Model> list = new ArrayList<>();
      for (int i = 0; i < 8; i++) {
         Model model = new Model();
         model.setNumber(0);
         model.setNumber2(0);
         model.setBrand(brandlist[i]);
         model.setPallet_size(pallet_size[i]);
         list.add(model);
      }
      return list;
   }
}

现在我想使用第二类的数组列表:

public class CastleLager extends brands {

   private RecyclerView recyclerView;
   //private String modelArrayList;
   //private Context ctx;
   public static ArrayList<Model> modelArrayList;
   private CustomAdapter customAdapter;
   //private Button btnnext;
   public String[] castlebrandlist = new String[] {
      "Castle Lager 340ml NRB (85023)",
      "Castle Lager 330ml Cans (85736)",
      "Castle Lager 500ml Cans (85023)",
      "Castle Lager 440ml NRB (86798)",
      "Castle Lager 330ml RB (85556)",
      "Castle Lager 750ml RB (85021)",
      "Castle Lager 340ml NRB 12 Pack (87009)",
      "Castle Lager 500ml Cans 12 Pack (85022)"
   };
}

我知道它可能非常基本,但正如我所说,我对 java 很陌生,只是不知道从哪里开始。谢谢。

【问题讨论】:

  • 您只能导入一个,而另一个必须使用完全限定名称,例如holder.tvBrand.setText((CharSequence) com.example.android.sab.CastleLager.modelArrayList.get(position).getBrand());
  • 或者只导入类,并使用Class.field语法EG:CastleLager.modelArrayList...
  • 谈到命名:阅读 Java 命名约定。类名总是以大写开头。所以extends brand 也听错了。

标签: java class import


【解决方案1】:

解决方案很简单:避免使用“相对”名称。

含义:当您有 x.y.Z 和 x2.y2.Z 时,请不要在源代码中使用名称 Z,而是使用完全限定名称 x.y.Zx2.y2.Z

是的,这有时很不方便,但这是您唯一的选择。其他语言,例如 python 允许你“重命名”导入的东西,但 Java 不允许。当两个类具有相同名称时,避免名称冲突的唯一选择是切换到完全限定名称。

请确定:您的代码中的真正问题是您希望允许“读/写”访问字段 不同地方的一个班级。你看 - 字段代表你的类的内部状态。您努力向外界隐藏此类信息 - 因为这是外部任何人都不应该关心或知道的实施细节。

因此,真正的答案是退后一步,考虑一个更健壮的设计,该设计不是基于将字段暴露给外部世界!

【讨论】:

  • GhostCat 我认为你是对的。我可能不得不后退几步。正如我所说,我是 Java 新手,做所有这些工作有点令人沮丧,然后才意识到你必须重新开始。还是谢谢你。
猜你喜欢
  • 1970-01-01
  • 2015-05-05
  • 2021-04-07
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 2014-08-08
  • 2013-02-05
  • 1970-01-01
相关资源
最近更新 更多