产品列表不能转换为可迭代类型

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,ProductProducts,并将大部分逻辑放在后者 class 中。到那时,我可能会一起取消静态方面。