我已经多次看到使用return $this; 模式样式的Zend Framework - 从我的观点来看:
Pro:对于在同一个对象上链接许多操作并使代码更短,似乎是非常糟糕的模式样式.
Con:当你看到该对象在方法中返回自己时,代码看起来有点奇怪,这会做其他事情(例如某些属性的setter)
它是真正好的模式实践还是反模式实践?
编辑:好吧,从我这边说它有点太多了"模式",感谢大家指点我正确的方向!
我想问一下使用匿名类和命名内部类的好习惯是什么?
我正在编写一个Android应用程序,其中包含许多UI元素(按钮,文本字段等).对于他们中的许多人我需要一些听众,所以在onCreate应用程序中我有一堆非常小的匿名类,如:
someButton.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
// do something...
}
}
);
Run Code Online (Sandbox Code Playgroud)
每个这样的匿名类都是5到20行大 - 足够小,非常适合来自Java™的Nutshell书中的推荐:
通常,在以下情况下,您应该考虑使用匿名类而不是本地类:
- 班级的身体很短.
- 只需要该类的一个实例.
- 该类在定义后立即使用.
- 该类的名称不会使您的代码更容易理解.
但问题是,IMO onCreate变得非常大,通过快速查看代码变得更加复杂.它仍然很容易理解,但太大了.
那么在这种情况下会有什么更好的练习 - 拥有一堆小的内部子类,其中每个子类都很好地分开,但只使用一次或更好使用匿名类代替?
我正在使用Spring的转换服务,并在其中注册了我自己的转换器:
public class MyTypeConverter implements Converter<String, MyType> {
@Override
public Currency convert(String text) {
MyType object = new MyType();
// do some more work here...
return object;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,在我的应用程序中,我可以进行转换String,MyType并且运行良好:
@Autowired
private ConversionService cs;
public void doIt() {
MyType object = cs.convert("Value1", MyType.class);
}
Run Code Online (Sandbox Code Playgroud)
但是我也注意到,例如,我可以在我的MVC控制器中使用相同的转换器,它也以某种方式处理列表:
@RequestMapping(method = RequestMethod.GET, value = "...")
@ResponseBody
public final String doIt(@RequestParam("param1") List<MyType> objects) throws Exception {
// ....
}
Run Code Online (Sandbox Code Playgroud)
因此,如果我param1=value1,value2在控制器中提交,我会收到一个List<MyType>包含两个元素的内容.所以spring会用逗号分割String,然后将每个元素分别转换为MyType.是否有可能以编程方式执行此操作?
我需要类似这样的东西:
List<MyType> objects = cs.convert("Value1,Value2", …Run Code Online (Sandbox Code Playgroud) 我有一个基于泛型的DAO类,它是我项目中所有其他DAO类的基础,并包含常用功能:
public class Dao<E> {
private SessionFactory factory;
public void setSessionFactory(SessionFactory factory) {
this.factory = factory;
}
public E get(int id) {
// ....
}
public void save(E entity) {
// ...
}
public void delete(E entity) {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
在我的项目中,我使用多个数据源,指向不同的数据库,因此,我有多个会话和事务管理器:
<bean id="factory1" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="source1" />
</bean>
<bean id="manager1" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="factory1" />
</bean>
<bean id="factory2" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="source2" />
</bean>
<bean id="manager2" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="factory2" />
</bean>
Run Code Online (Sandbox Code Playgroud)
现在我想创建几个DAO,在不同的数据库上运行:
@Repository
@Transactional("manager1")
public class …Run Code Online (Sandbox Code Playgroud) 是否有可能以某种方式以编程方式切换内置的Android配置文件?
我打算编写另一个配置文件应用程序,但实际内置的配置文件足以满足我的需求,我只需要自动切换它们.
我正在创建自己的自定义快捷方式注释,如Spring Documentation中所述:
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Transactional(value = "Custom", readOnly = true)
public @interface CustomTransactional {
}
Run Code Online (Sandbox Code Playgroud)
是否有可能,通过我的自定义注释,我还可以设置其他可用的属性@Transactional?我想能够使用我的注释,例如,像这样:
@CustomTransactional(propagation = Propagation.REQUIRED)
public class MyClass {
}
Run Code Online (Sandbox Code Playgroud) 我需要决定使用哪个配置框架.目前我在考虑使用属性文件和XML文件.我的配置需要有一些原始分组,例如XML格式将是这样的:
<configuration>
<group name="abc">
<param1>value1</param1>
<param2>value2</param2>
</group>
<group name="def">
<param3>value3</param3>
<param4>value4</param4>
</group>
</configuration>
Run Code Online (Sandbox Code Playgroud)
或属性文件(类似于log4j.properties):
group.abc.param1 = value1
group.abc.param2 = value2
group.def.param3 = value3
group.def.param4 = value4
Run Code Online (Sandbox Code Playgroud)
我需要双向(读写)配置库/框架.好的功能是 - 我可以把不同的配置组读出来作为不同的对象,所以我可以稍后将它们传递到不同的地方,例如 - 读取属于组"abc"作为一个对象和"def"作为另一个对象的所有内容.如果那是不可能的,我当然可以在应用程序初始化部分自己将单个配置对象拆分为较小的配置对象.
哪种框架最适合我?
对于我,AutoCompleteTextView我需要从Web服务中获取数据.因为它可能需要一点时间我不希望UI线程没有响应,所以我需要以某种方式在单独的线程中获取数据.例如,在从SQLite DB获取数据时,使用CursorAdapter方法非常简单runQueryOnBackgroundThread.我一直在寻找周围其他适配器一样ArrayAdapter,BaseAdapter但无法找到类似的话...
有一个简单的方法如何实现这一目标?我不能简单地ArrayAdapter直接使用,因为建议列表是动态的 - 我总是根据用户输入获取建议列表,因此无法预取和缓存以供进一步使用...
如果有人可以就这个主题提供一些提示或示例 - 会很棒!
我有一个横向LinearLayout,我有EditText和Spinner元素.我需要调整哪些属性,以便我得到比例宽度:我想要EditText占用Spinner所有可用宽度的3/5和- 2/5?
我的代码看起来像这样:
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/LinearLayout01">
<EditText
android:layout_height="wrap_content"
android:id="@+id/EditText01"
android:singleLine="true">
</EditText>
<Spinner
android:layout_height="wrap_content"
android:id="@+id/Spinner01"
android:layout_width="wrap_content">
</Spinner>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
我尝试过设置android:layout_weight,但不知何故它对我来说看起来并不"稳定" - 当EditText没有文本时 - 一切看起来都很好,但是一旦我开始输入文本 - 它就会开始扩展并相应Spinner缩小......
是否可以减去字符类中匹配的字符?
Java文档中有关于带减法的字符类的示例:
[a-z&&[^bc]] - a through z, except for b and c: [ad-z] (subtraction)
[a-z&&[^m-p]] - a through z, and not m through p: [a-lq-z](subtraction)
Run Code Online (Sandbox Code Playgroud)
当对不相同时,我想写出匹配两对单词字符的模式:
1) "aaaa123" - should NOT match
2) "aabb123" - should match "aabb" part
3) "aa--123" - should NOT match
Run Code Online (Sandbox Code Playgroud)
我接近以下模式的成功:
([\w])\1([\w])\2
Run Code Online (Sandbox Code Playgroud)
但当然它在案例1中不起作用,所以我需要减去第一组的匹配.但是当我尝试这样做时:
Pattern p = Pattern.compile("([\\w])\\1([\\w&&[^\\1]])\\2");
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:
Exception in thread "main" java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 17
([\w])\1([\w&&[^\1]])\2
^
at java.util.regex.Pattern.error(Pattern.java:1713)
Run Code Online (Sandbox Code Playgroud)
所以它似乎不适用于群组,而只是列出特定字符.以下模式编译没有问题:
Pattern p = Pattern.compile("([\\w])\\1([\\w&&[^a]])\\2");
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来编写这样的模式?
java ×5
android ×4
spring ×2
annotations ×1
frameworks ×1
layout ×1
oop ×1
php ×1
properties ×1
regex ×1
spring-3 ×1
spring-mvc ×1
subclass ×1
transactions ×1
xml ×1