Ingredient 类型的 getType() 方法未定义

问题描述 投票:0回答:2
package tacos.web;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttributes;
import java.lang.reflect.Field;
import lombok.extern.slf4j.Slf4j;
import tacos.Ingredient;
import tacos.Ingredient.Type;
import tacos.Taco;

@Slf4j
@Controller
@RequestMapping("/design")
@SessionAttributes("tacoOrder")
public class DesignTacoController {

@ModelAttribute
public void addIngredientsToModel(Model model) {
        List<Ingredient> ingredients = Arrays.asList(
          new Ingredient("FLTO", "Flour Tortilla", Type.WRAP),
          new Ingredient("COTO", "Corn Tortilla", Type.WRAP),
          new Ingredient("GRBF", "Ground Beef", Type.PROTEIN),
          new Ingredient("CARN", "Carnitas", Type.PROTEIN),
          new Ingredient("TMTO", "Diced Tomatoes", Type.VEGGIES),
          new Ingredient("LETC", "Lettuce", Type.VEGGIES),
          new Ingredient("CHED", "Cheddar", Type.CHEESE),
          new Ingredient("JACK", "Monterrey Jack", Type.CHEESE),
          new Ingredient("SLSA", "Salsa", Type.SAUCE),
          new Ingredient("SRCR", "Sour Cream", Type.SAUCE)
        );

        Type[] types = Ingredient.Type.values();
        for (Type type : types) {
          model.addAttribute(type.toString().toLowerCase(),
              filterByType(ingredients, type));
        }
}
  @GetMapping
  public String showDesignForm(Model model) {
    model.addAttribute("taco", new Taco());
    return "design";
  }

  private Iterable<Ingredient> filterByType(
      List<Ingredient> ingredients, Type type) {
    return ingredients
              .stream()
              .filter(x -> x.getType().equals(type))
              .collect(Collectors.toList());
  }

}

我正在阅读《Spring in Action》这本书的第 6 章。在 filterByType 方法中,“.getType()”显示错误

The method getType() is undefined for the type Ingredient

我以为这是lombok导致的错误,但我也安装了它。我还导入了包“java.lang.reflect.Field”,但仍然收到错误。

package tacos;

import lombok.Data;


@Data
public class Ingredient {
 public Ingredient(String string, String string2, Type wrap) {
        // TODO Auto-generated constructor stub
    }

private final String id = "";
 private final String name = "";
 private final Type type = null;
 
 public  enum Type {
     WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
 }
}

上面的类是成分类

java spring spring-boot spring-mvc
2个回答
0
投票

看来您不是第一个遇到此问题的人https://coderanch.com/t/730026/java/lombok

在 DesignTacoController 类的 addIngredientsToModel 中,标记了 错误是“构造函数 Ingredient(String, String, Ingredient.Type) 未定义”。此外,在方法 filterByType 中,标记的错误是“The 方法 getType() 对于 Ingredient 类型未定义”。它出现 那个龙目岛就是不工作。但我的 pom 中有 lombok:

答案:

仅添加 Lombok 作为依赖项并不能让 Eclipse 识别它, 你需要一个插件。请参阅

https://www.baeldung.com/lombok-ide 有关将 Lombok 安装到 Eclipse(以及 IntelliJ for 那些喜欢它的人)。


0
投票
这不是lombok的问题。这是因为没有getType()函数 成分类。添加 getType() 函数将解决该问题。

public class Ingredient { private final String id; private final String name; private final Type type; public Ingredient(String id, String name, Type type) { this.id = id; this.name = name; this.type = type; } public enum Type { WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE } *public Type getType() { return this.type; }* }
    
© www.soinside.com 2019 - 2024. All rights reserved.