这是我的代码 -
View layout = LayoutInflater.from(this).inflate(R.layout.dialog_loc_info, null);
final Button mButton_Mobile = (Button) layout.findViewById(R.id.button);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
mButton_Mobile.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
if(builder.)
showDialog(); // this is another dialog, nothing to do with this code
}
});
builder.setNeutralButton(getString(android.R.string.ok),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.show();
Run Code Online (Sandbox Code Playgroud) 我正在创建一系列构建器来清理语法,为我的模拟创建域类,作为改进整体单元测试的一部分.我的构建器基本上填充了一个域类(例如a Schedule),其中一些值通过调用相应的值WithXXX并将它们链接在一起来确定.
我在构建器中遇到了一些共性,我想将它抽象到基类中以增加代码重用.不幸的是,我最终看起来像:
public abstract class BaseBuilder<T,BLDR> where BLDR : BaseBuilder<T,BLDR>
where T : new()
{
public abstract T Build();
protected int Id { get; private set; }
protected abstract BLDR This { get; }
public BLDR WithId(int id)
{
Id = id;
return This;
}
}
Run Code Online (Sandbox Code Playgroud)
特别注意protected abstract BLDR This { get; }.
域类构建器的示例实现是:
public class ScheduleIntervalBuilder :
BaseBuilder<ScheduleInterval,ScheduleIntervalBuilder>
{
private int _scheduleId;
// ...
// UG! here's the problem:
protected override ScheduleIntervalBuilder This …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用XML :: Builder生成一些XML,但我的元素名称需要在其中包含连字符.
当我尝试时,我得到未定义的方法,元素名称在连字符处被截断
xml.instruct!
xml.update-manifest do
xml.latest-id @latest_version_update.guid
xml.download-url @latest_version_update.download_url
xml.release-information-url version_guid_url(@latest_vesrion_update.guid)
end
Run Code Online (Sandbox Code Playgroud)
固定版本是
xml.instruct!
xml.tag! 'update-manifest' do
xml.tag! 'latest-id', @latest_version_update.guid
xml.tag! 'download-url', @latest_version_update.download_url
xml.tag! 'release-information-url', version_guid_url(@latest_vesrion_update.guid)
end
Run Code Online (Sandbox Code Playgroud) 我不明白什么是CDT中的构建器,以及与"C/C++ Build"内容的关系是什么.
我在"C/C++ Build"配置中设置了SCons.它确实有效:我做了两个配置(发布和调试),并启动了我的SCons脚本.但是当我现在尝试调试时,我正在研究这些Builders stauuf(我正在发现Eclipse ......).
关于这一点,文档根本不清楚.
感谢帮助.
有人可以建议我如何使用JPA Criteria构建器API构建以下查询吗?
SELECT id,status,created_at from transactions where status='1'
and currency='USD' and appId='123' order by id
Run Code Online (Sandbox Code Playgroud)
如果我能找到一个基于作为Map<String,String>使用元模型类或任何其他方式给出的参数动态创建的解决方案,那就更好了.
我是设计模式的新手,所以我有一个关于Builder模式的问题.今天我听说Builder Pattern与StringBuilderJava中的类C#不同.我知道Builder Pattern的主要目标是在几个步骤中创建复杂的对象......我认为这是StringBuilder用它的方法制作的Append...所以我很难找到差异......
你能告诉我是否真的有什么不同,如果是......它是什么:)?
我正在重写一些代码,并且我已经决定了重新创建类的方法,因为有固定数量的工作表,我将它们创建为枚举.这是基于构建器模式与伸缩构造器的可读性的决定.
代码我抓住了一些.xls文件,添加了标题(并从其他.xls文件中读取了一些文件),也许还有一些子表格.然后,它以特定的方式将各种这些工作表合并在一起,以在主要的Excel工作簿上制作选项卡.我的问题是,某些工作簿选项卡使用不同数量的工作表作为参数.我正在尝试应用构建器模式.这是我正在尝试编写的代码:
public enum workBookSheet {
mySheet1("Name1","mainSheet1.xls",true,1).addSubSheet("pathToSubSheet1.xls"),
mySheet2("Name2","mainSheet2.xls",true,2).addHeaderSheet("pathToHeaders.xls").addSubsheet("pathtoSubSheet2.xls");
private String tabName;
private String mainSheetName;
private Boolean available;
private Integer order;
private String subSheetName;
private String headerSheetName;
private workBookSheet(String tabName, String mainSheetName, Boolean available, Integer order){
this.tabName = tabName;
this.mainSheetName = mainSheetName;
this.available = available;
this.order = order;
}
public workBookSheet addSubSheet(String subSheetName){
this.subSheetName = subSheetName;
return this;
}
public workBookSheet addHeaderSheet(String headerSheetName){
this.headerSheetName = headerSheetName;
return this;
}
}
Run Code Online (Sandbox Code Playgroud)
java给我的错误似乎是说Java期望我的枚举声明(顶部的'枚举构造函数'的逗号分隔列表)只包含构造函数,而不是其他方法.我可以将这些方法移到下面的"构建器"方法中,无需投诉.
public void buildSheets(){
mySheet1.addSubSheet("pathToSubSheet1.xls");
mySheet2.addHeaderSheet("pathToHeaders.xls").addSubSheet("pathtoSubSheet2.xls");
}
Run Code Online (Sandbox Code Playgroud)
这是在枚举上实现构建器模式的唯一方法吗?它确实需要我运行一个单独的方法,这不是太麻烦.虽然我觉得我打破了这种模式(我想,如果这样做的话,这不是一件坏事.)
注意我已经仔细研究过,看看是否有其他人在网上或其他地方提出这个问题.我发现的最接近的是关于Enums和Factories的问题,但这并没有完全回答我的问题.另外我知道这不是构建器模式,因为我没有单独的类,然后接受创建新枚举的build()方法.我想这是我初始设计中问题的根源,但我对Java相对较新.
那么有没有更好的方法在Java枚举上使用构建器模式?或者我的'足够接近'是什么?
在"深层"对象层次结构中使用Builder模式的最佳实践是什么?为了详细说明,我探讨了将Joshua Bloch提出的Builder模式应用于我的XML绑定代码的想法(我使用的是SimpleXML,但这个问题适用于任何情况).我的对象层次结构深度为4级,具有不同程度的复杂性.我的意思是,在某些级别中,我只有几个属性用于我的对象,而在某些其他级别,我有多达10个属性.
所以请考虑这个假设的例子(为简洁起见,我省略了Simple XML注释)
public class Outermost {
private String title;
private int channel;
private List<Middle> middleList;
}
class Middle{
private int id;
private String name;
private boolean senior;
/* ... ... 10 such properties */
private Innermost inner;
}
class Innermost{
private String something;
private int foo;
/* ... Few more of these ..*/
}
Run Code Online (Sandbox Code Playgroud)
如果我想Outermost使用构建器强制创建对象,那么最好的方法是什么?最明显的答案是为inner static Builder上述每个类提供类.
但是,这不会让生成器模式试图解决的问题变得笨拙吗?我正在考虑这样的事情 - 这将强制执行"由内而外"的方法 - 这意味着在将Innermost对象添加到Middle对象之前必须完全构造和实例化对象.但我们都知道在实践中(特别是在构建XML或JSON时),我们很少有"及时"的信息来实现这一点.
有可能,人们最终会在每个级别都拥有每个属性的变量; 并在最后创建对象.或者,最终会让代码中出现多个级别的Builder,从而增加了混乱.
那么,关于如何优雅地实现这一点的任何想法?
我试图将lombok用于我的项目.
我有一个A类:
@Data
@Builder
public class A {
Integer a1;
}
Run Code Online (Sandbox Code Playgroud)
和B级:
@Data
public class B extends A {
Integer b1;
@Builder
public B(Integer b1, Integer a1) {
super(a1);
this.b1 = b1;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,说B中的builder()无法覆盖A中的builder(),因为BBuilder中的返回类型与ABuilder中的返回类型不兼容.
有没有办法用lombok做到这一点?我不想为B写完整的构建器,除非我没有任何其他选项.
PS:由于问题,我为B类提供了明确的构造函数.我试着搜索,但我找不到同样好的解决方案.任何帮助都非常感谢.