我想将我的实体放在查询生成器的函数中:
->add( 'weeks', 'entity', array(
'class' => 'MV\CaravanBundle\Entity\CaravanRow',
'property' => 'line',
'query_builder' => function(EntityRepository $er ) use ( $caravan ) {
return $er->createQueryBuilder('w')
->orderBy('w.dateFrom', 'ASC')
->where('w.caravan = ?', $caravan )
->andWhere('w.visible = 1')
->andWhere('w.booked = 0');
}
Run Code Online (Sandbox Code Playgroud)
但得到消息:
在此上下文中不允许表达"实体\名称"类型
那么提供querybuilder信息的(最佳)方法是什么呢?
我有一个接口层次结构,有Child实现Parent.我想使用不可变对象,所以我想设计Builder一些方便地构造这些对象的类.但是,我有很多Child接口,我不想Parent在每种类型的子构建器中重复构建s 的代码.
因此,假设以下定义:
public interface Parent {
public Long getParentProperty();
}
public interface Child1 extends Parent {
public Integer getChild1Property();
}
public interface Child2 extends Parent {
public String getChild2PropertyA();
public Object getChild2PropertyB();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能有效地实施构建器Child1Builder和Child2Builder?他们应该支持以下操作:
Child1 child1 = Child1Builder.newChild1().withChild1Property(5).withParentProperty(10L);
Run Code Online (Sandbox Code Playgroud)
和
Child2 child2 = Child2Builder.newChild2().withChild2PropertyA("Hello").withParentProperty(10L).withChild2PropertyB(new Object());
Run Code Online (Sandbox Code Playgroud)
我不想withParentProperty为每个子构建器实现特殊情况.
编辑添加第二个属性,Child2以澄清这不能用简单的泛型.我不是在寻找一种方式来组合Child1和Child2-我正在寻找一种方式来实现Builder,不重复建设的父类为每个子类的工作体系.
谢谢你的帮助!
我想知道如何使用数据填充TableView ...我看到的所有示例都创建了一个包含列和所有内容的TableView,并将其添加到场景中.全部都是在java代码中完成的.
我想知道的:如果我在JavaFx场景构建器中设计我的"表单".在那里定义所有表和列.如何访问它以从java填充它?或者,如果有人可以指出我正确的教程请.
我在JavaFx Scene Builder中定义了我的表单 - 只有一个包含3列的TableView
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.paint.*?>
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="288.0" prefWidth="293.0" xmlns:fx="http://javafx.com/fxml">
<children>
<TableView fx:id="tableView" layoutX="35.0" layoutY="28.0" prefHeight="200.0" prefWidth="227.0">
<columns>
<TableColumn prefWidth="75.0" text="UserId" fx:id="UserId" />
<TableColumn prefWidth="75.0" text="UserName" fx:id="UserName" />
<TableColumn prefWidth="75.0" text="Active" fx:id="Active" />
</columns>
</TableView>
</children>
</AnchorPane>
Run Code Online (Sandbox Code Playgroud)
我的数据在我的Java代码中的ResultSet中.
ResultSet rs = c.createStatement().executeQuery(SQL);
Run Code Online (Sandbox Code Playgroud)
我需要填充TableView.
谢谢
在Kotlin中,我想将扩展方法添加到类中,例如添加到类中Entity.但我只想Entity在交易中看到这些扩展,否则隐藏.例如,如果我定义这些类和扩展:
interface Entity {}
fun Entity.save() {}
fun Entity.delete() {}
class Transaction {
fun start() {}
fun commit() {}
fun rollback() {}
}
Run Code Online (Sandbox Code Playgroud)
我现在可以叫意外save(),并delete()在任何时候,但我只希望他们可以在后start()一交易后不再commit()或rollback()?目前我可以这样做,这是错误的:
someEntity.save() // DO NOT WANT TO ALLOW HERE
val tx = Transaction()
tx.start()
someEntity.save() // YES, ALLOW
tx.commit()
someEntity.delete() // DO NOT WANT TO ALLOW HERE
Run Code Online (Sandbox Code Playgroud)
如何使它们在正确的上下文中显示和消失?
注意: 这个问题是由作者故意编写和回答的(自答案问题),因此对于常见问题的Kotlin主题的惯用答案存在于SO中.还要澄清为Kotlin的alphas写的一些非常古老的答案,这些答案对于当前的Kotlin来说是不准确的.其他答案也欢迎,有很多样式如何回答这个问题!
我需要从Java对象层次结构构建XML文档.Java类和XML格式都是固定的.所以我不能使用像XStream这样的XML序列化器:它将XML格式基于Java类.同样,像JAXB这样的Java XML绑定技术也不起作用,因为它从XML模式创建Java类[编辑:但见下文].我需要一个手动方法.
低技术的StringBuilder路由导致脆弱和错误的代码(至少对我而言!).
像JAXP或JDOM这样的API 可以提供更强大的代码,但这些代码非常冗长.
Groovy有一个优雅的MarkupBuilder:
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.records() {
car(name:'HSV Maloo', make:'Holden', year:2006) {
country('Australia')
record(type:'speed', 'Production Pickup Truck with speed of 271kph')
}
car(name:'P50', make:'Peel', year:1962) {
country('Isle of Man')
record(type:'size', 'Smallest Street-Legal Car at 99cm wide and 59 kg')
}
}
Run Code Online (Sandbox Code Playgroud)
其他语言(例如Ruby)甚至更好,但我希望保留纯Java.似乎有一些新的Java构建器用于Java,例如practicalxml和James Murty的xmlbuilder.
在Java中构建XML文档有哪些更优雅的方法?
摘要:
无论如何,CurtainDog推荐使用JAXB,并且jherico告诉我这是一个相关的建议:然后你可以使用Dozer在我当前的JavaBeans和JAXB …
我有两个字段,我需要增加字符限制.我仔细阅读了文档,令我惊讶的是我找不到它的选择.有可能吗?如果没有,我该如何解决这个问题呢?
我可以删除列并使用正确的属性重新创建它,但我不想丢失数据库中的任何数据.
我常常发现使用pre-java-8设置实现构建器模式很繁琐.总是有很多几乎重复的代码.构建器本身可以被视为样板.
事实上,有代码重复检测器,几乎可以考虑使用pre-java-8工具制作的构建器的每个方法作为每个其他方法的副本.
所以考虑下面的类和它的pre-java-8构建器:
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class PersonBuilder {
private static class PersonState {
public String name;
public int age;
}
private PersonState state = new PersonState();
public PersonBuilder withName(String name) {
state.name = name;
return this; …Run Code Online (Sandbox Code Playgroud) 这是一个关于将步骤构建器模式与增强或向导构建器模式组合到创建 DSL中的人机界面问题.它使用流畅的界面,虽然它使用方法链接,而不是级联.也就是说,这些方法返回不同的类型.
我面对的是一个怪物类,它有两个构造函数,它们混合了整数,字符串和一系列字符串.每个构造函数都是10个参数.它还有大约40个可选的制定者; 如果一起使用,其中一些相互冲突.它的构造代码看起来像这样:
Person person = Person("Homer","Jay", "Simpson","Homie", null, "black", "brown",
new Date(1), 3, "Homer Thompson", "Pie Man", "Max Power", "El Homo",
"Thad Supersperm", "Bald Mommy", "Rock Strongo", "Lance Uppercut", "Mr. Plow");
person.setClothing("Pants!!");
person.setFavoriteBeer("Duff");
person.setJobTitle("Safety Inspector");
Run Code Online (Sandbox Code Playgroud)
这最终失败了,因为事实证明设置了两个最喜欢的啤酒和职位是不相容的.叹.
重新设计怪物类不是一种选择.它被广泛使用.有用.我只是不想再看它直接构建了.我想写一些干净的东西来喂它.在不让开发人员记住它们的情况下遵循其规则的东西.
与我一直在研究的美妙的建造者模式相反,这个东西没有风味或类别.它在需要时始终需要一些字段和其他字段,有些仅取决于之前设置的字段.施工人员不是伸缩式的.它们提供了两种使类进入相同状态的替代方法.它们漫长而丑陋.他们想要给他们的东西各不相同.
一个流畅的建设者肯定会让长建筑师更容易看到.然而,大量可选的设置器使所需的设置器变得混乱.并且要求级联的流利构建器不满足:编译时执行.
构造函数强制开发人员显式添加必需的字段,即使将其归零也是如此.使用级联流畅的构建器时,这会丢失.与安装者失去的方式相同.我想要一种方法来阻止开发人员构建,直到添加了每个必填字段.
与许多建筑师模式不同,我所追求的不是不变性.我发现它,我正在离开课堂.我想通过查看构建它的代码来了解构造的对象是否处于良好状态.无需参考文档.这意味着它需要通过有条件的必要步骤来接受程序员.
Person makeHomer(PersonBuilder personBuilder){ //Injection avoids hardcoding implementation
return personBuilder
// -- These have good default values, may be skipped, and don't conflict -- //
.doOptional() …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Slack Workflow Builder 格式化消息,但它不起作用。
我准备一个文本作为单个变量并将其传递给 Slack webhook。在 Slack Workflow Builder 中,我接收它并发送一条消息,只需将该单个变量内容放入文本消息中即可。消息看起来不错,但无法成功格式化消息中的链接。
我尝试了以下格式:[Link](http://link.com)和<http://link.com|Link>. 这两个输出都是错误的,所有括号都没有格式化。但是当我将第一个变体发送[Link](http://link.com)到 Slackbot 时,它按预期工作 - 它显示只是可点击的Link。
我究竟做错了什么?Slack 是否支持 Slack Workflow Builder 中的 URL 格式?我怎样才能在那里做呢?
使用构建器设计模式的缺点是什么.有没有?
编辑 - 我想知道使用构建器设计模式是否有任何不良后果?正如GOF书中所述,他们提到了设计模式的好坏后果.但他们没有提到建筑师设计模式的任何不良后果.