未找到任何构造函数Java+;龙目
主要 人类阶级未找到任何构造函数Java+;龙目,java,constructor,lombok,Java,Constructor,Lombok,主要 人类阶级 @Data @NoArgsConstructor @AllArgsConstructor public class Viking extends Human{ public Integer proDrinker; public Pee pee; public Drink drink; public void pee() {pee.pee();} public void drink() {drink.drink();} } 饮料和小便
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Viking extends Human{
public Integer proDrinker;
public Pee pee;
public Drink drink;
public void pee() {pee.pee();}
public void drink() {drink.drink();}
}
饮料和小便界面是一样的
@Data
@AllArgsConstructor
@NoArgsConstructor
public abstract class Human {
public String Name;
public Integer Age;
public Integer Weight;
}
发件人:
@AllArgsConstructor为每个构造函数生成一个具有1个参数的构造函数
在你们班上
基于错误消息
com.company.models.Viking.Viking(java.lang.Integer、com.company.interfaces.Pee、com.company.interfaces.Drink)不适用
你可能需要这个
Error: Error:(21, 21) java: no suitable constructor found for Viking(java.lang.String,int,int,com.company.models.DrinkVikingImp,com.company.models.PeeVikingImp,int)
constructor com.company.models.Viking.Viking() is not applicable
(actual and formal argument lists differ in length)
constructor com.company.models.Viking.Viking(java.lang.Integer,com.company.interfaces.Pee,com.company.interfaces.Drink) is not applicable
(actual and formal argument lists differ in length)
然后你必须自己设置人类属性你可以使用Lombok的生成器(@SuperBuilder annotation)解决这个问题,该生成器是在1.18版中引入的
vikings.add(10, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
vikings.add(9, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
vikings.add(9, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
vikings.add(5, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
vikings.add(3, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
然后,您将能够按照如下方式构建Viking对象:
@Data
@SuperBuilder
public abstract class Human {
...
}
@Data
@SuperBuilder
public class Viking extends Human {
...
}
还要检查您的人工类字段名,它们不应以大写字母开头。这在Lombok中是不可能的。虽然这将是一个非常好的特性,但它需要解析才能找到超类的构造函数。超级类只有在Lombok被调用时才知道名称。使用import语句和classpath查找实际的类并不是一件小事。在编译过程中,您不能仅仅使用反射来获取构造函数列表。这里可能回答了您要查找的问题:
vikings.add(10, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
vikings.add(9, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
vikings.add(9, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
vikings.add(5, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
vikings.add(3, new Viking(new DrinkVikingImp(), new PeeVikingImp()));
@Data
@SuperBuilder
public abstract class Human {
...
}
@Data
@SuperBuilder
public class Viking extends Human {
...
}
vikings.add(Viking.builder()
.name("Lean")
.age(23)
.weight(100)
.drink(new DrinkVikingImp())
.pee(new PeeVikingImp())
.proDrinker(10)
.build());