产品列表不能转换为可迭代类型
product list cannot be cast to iterable type
产品列表无法转换为可迭代类型,你能告诉我如何解决这个问题或更好的逻辑 return getProductByName() 值作为字符串类型吗?
public class Products {
private static Iterable<Products> values() {
return (Iterable<Products>) new Products();
}
private int id;
private String product;
private List<Products> p;
public Products() {
p = new ArrayList<Products>(6);
p.add(new Products(0, "Foundation"));
p.add(new Products(1, "BB Cream"));
p.add(new Products(2, "Concealer"));
p.add(new Products(3, "Blush"));
p.add(new Products(4, "High Lighter"));
p.add(new Products(5, "Setting Spray/Powder"));
}
private Products(int id, String product){
this.id = id;
this.product = product;
}
public static Products getProductByName(int id){
for(Products productName:Products.values()){
if(productName.getId() == id){
return productName;
}
}
return null;
}
/* Getters and Setters */
}
您的代码混淆了许多相互矛盾的概念。您似乎正在定义一个 Products
class 来表示单个产品和产品列表。此外,不清楚您是否希望实例化多个产品列表,或者是否希望通过静态方法拥有单个产品列表。
我建议您定义一个名为 Product
的 class 代表单个产品。然后,您可以定义第二个名为 Products
的 class 来表示产品列表,或者您可以向 Product
class 添加静态方法和变量,以允许您在任何时间
维护 class 的单个实例列表
这是采用上面列出的第二种方法的代码版本。 class 名称是Product
表示单个产品,然后有静态方法可以让您对Product
对象的单个列表进行操作。事实上,产品列表是内置的,并在您第一次尝试访问产品列表时创建。还提供了一个 setProductList
静态方法,可以让您创建不同的产品列表并将其插入,而不是使用内置列表。 class 的构造函数是 public 允许的。
import java.util.ArrayList;
import java.util.List;
class Product {
private static List<Product> productList = null;
private static List<Product> products() {
// If no list of products has been set, use the built-in list
if (productList == null)
initProductList();
return productList;
}
private static void initProductList() {
productList = new ArrayList<Product>(6);
productList.add(new Product(0, "Foundation"));
productList.add(new Product(1, "BB Cream"));
productList.add(new Product(2, "Concealer"));
productList.add(new Product(3, "Blush"));
productList.add(new Product(4, "High Lighter"));
productList.add(new Product(5, "Setting Spray/Powder"));
}
public static void setProductList(List<Product> productList) {
Product.productList = productList;
}
private int id;
private String name;
public Product(int id, String product){
this.id = id;
this.name = product;
}
public static Product getProductById(int id){
for(Product product: Product.products())
if(product.id == id)
return product;
return null;
}
public static String getProductNameById(int id) {
Product product = getProductById(id);
if (product == null)
return null;
return product.name;
}
public static void main(String[] args) {
System.out.println(Product.getProductNameById(0));
System.out.println(Product.getProductNameById(2));
System.out.println(Product.getProductNameById(4));
}
}
结果:
Foundation
Concealer
High Lighter
更新:郑重声明...如果让我重新来过,我会选择展示我在回答文本中建议的其他解决方案。 class 的大部分逻辑是关于管理产品对象列表,而很少是关于表示每个产品。我认为最好定义两个 class,Product
和 Products
,并将大部分逻辑放在后者 class 中。到那时,我可能会一起取消静态方面。
产品列表无法转换为可迭代类型,你能告诉我如何解决这个问题或更好的逻辑 return getProductByName() 值作为字符串类型吗?
public class Products {
private static Iterable<Products> values() {
return (Iterable<Products>) new Products();
}
private int id;
private String product;
private List<Products> p;
public Products() {
p = new ArrayList<Products>(6);
p.add(new Products(0, "Foundation"));
p.add(new Products(1, "BB Cream"));
p.add(new Products(2, "Concealer"));
p.add(new Products(3, "Blush"));
p.add(new Products(4, "High Lighter"));
p.add(new Products(5, "Setting Spray/Powder"));
}
private Products(int id, String product){
this.id = id;
this.product = product;
}
public static Products getProductByName(int id){
for(Products productName:Products.values()){
if(productName.getId() == id){
return productName;
}
}
return null;
}
/* Getters and Setters */
}
您的代码混淆了许多相互矛盾的概念。您似乎正在定义一个 Products
class 来表示单个产品和产品列表。此外,不清楚您是否希望实例化多个产品列表,或者是否希望通过静态方法拥有单个产品列表。
我建议您定义一个名为 Product
的 class 代表单个产品。然后,您可以定义第二个名为 Products
的 class 来表示产品列表,或者您可以向 Product
class 添加静态方法和变量,以允许您在任何时间
这是采用上面列出的第二种方法的代码版本。 class 名称是Product
表示单个产品,然后有静态方法可以让您对Product
对象的单个列表进行操作。事实上,产品列表是内置的,并在您第一次尝试访问产品列表时创建。还提供了一个 setProductList
静态方法,可以让您创建不同的产品列表并将其插入,而不是使用内置列表。 class 的构造函数是 public 允许的。
import java.util.ArrayList;
import java.util.List;
class Product {
private static List<Product> productList = null;
private static List<Product> products() {
// If no list of products has been set, use the built-in list
if (productList == null)
initProductList();
return productList;
}
private static void initProductList() {
productList = new ArrayList<Product>(6);
productList.add(new Product(0, "Foundation"));
productList.add(new Product(1, "BB Cream"));
productList.add(new Product(2, "Concealer"));
productList.add(new Product(3, "Blush"));
productList.add(new Product(4, "High Lighter"));
productList.add(new Product(5, "Setting Spray/Powder"));
}
public static void setProductList(List<Product> productList) {
Product.productList = productList;
}
private int id;
private String name;
public Product(int id, String product){
this.id = id;
this.name = product;
}
public static Product getProductById(int id){
for(Product product: Product.products())
if(product.id == id)
return product;
return null;
}
public static String getProductNameById(int id) {
Product product = getProductById(id);
if (product == null)
return null;
return product.name;
}
public static void main(String[] args) {
System.out.println(Product.getProductNameById(0));
System.out.println(Product.getProductNameById(2));
System.out.println(Product.getProductNameById(4));
}
}
结果:
Foundation
Concealer
High Lighter
更新:郑重声明...如果让我重新来过,我会选择展示我在回答文本中建议的其他解决方案。 class 的大部分逻辑是关于管理产品对象列表,而很少是关于表示每个产品。我认为最好定义两个 class,Product
和 Products
,并将大部分逻辑放在后者 class 中。到那时,我可能会一起取消静态方面。