java规范(一)------方法设计---返回多参数的方法怎么封装
2016-09-07 19:28
441 查看
两个方法
一是新建对象包含多参数
二是用map封装
把多参数新建为对象符合面向对象编程的思维,也可以使代码整洁。
使用map则是方便,不需要新建对象。
两种方法视情况使用。
假如我们有2个变量count和content需要经过一个方法里改变它的值我们可以用下面的方法:
main{
int count=0;
String content=“”;
changeValue(count,content);
System.out.println(count);
System.out.println(content);
}
private void changeValue(int count,String content){
count++;
content="new content";
}
但是这种写法很不友好, 我们最好不用返回值当作参数。因为这样变量的作用域不明显,而且容易混乱。
最好是 每个方法返回我们需要改成的值。
但是如果涉及到多参数参与变化的方法时怎么办呢?
可以使用map来进行封装再一起返回:
main{
Map<String, Object> data =changeValue(count,content);
System.out.println(data.get("count"));
System.out.println(data.get("content"));
}
private Map<String, Object> changeValue(int count,String content){
return MapBuilder
.forType(String.class, Object.class)
.with("count", count++)
.with("content", "new content")
.build();
}
package com.test.util;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Map构造器
*
*
*/
public final class MapBuilder<K, V> {
private Map<K, V> map;
private MapBuilder() {
map = new HashMap<K, V>();
}
/**
* create a builder
*
* @return
*/
public static <K, V> MapBuilder<K, V> create() {
return new MapBuilder<K, V>();
}
/**
* create a builder
*
* @param kClass key type
* @param vClass value type
*/
public static <K, V> MapBuilder<K, V> forType(Class<K> kClass, Class<V> vClass) {
return new MapBuilder<K, V>();
}
/**
* create a builder and put a kv pair.
*
* @param key
* @param value
* @return
*/
public static <K, V> MapBuilder<K, V> createWith(K key, V value) {
return new MapBuilder<K, V>().with(key, value);
}
/**
* put 键值对
*
* @param key 键
* @param value 值
* @return
*/
public MapBuilder<K, V> with(K key, V value) {
map.put(key, value);
return this;
}
/**
* 方法名称意义不明,放弃使用<br>
* 兼容过时代码,暂不删除。
*
* @param key
* @param value
* @return
*/
@Deprecated
public static <K, V> MapBuilder<K, V> makeNew(K key, V value) {
return createWith(key, value);
}
/**
* put 键值对 {@link #with(Object, Object)}
*
* @param key 键
* @param value 值
* @return
*/
@Deprecated
public MapBuilder<K, V> make(K key, V value) {
return with(key, value);
}
/**
* 构造Map对象
*
* @return 不可再修改的map
*/
public Map<K, V> build() {
return Collections.unmodifiableMap(map);
}
/**
* 返回原生Map对象
*
* @return
*/
public Map<K, V> original() {
return map;
}
}
一是新建对象包含多参数
二是用map封装
把多参数新建为对象符合面向对象编程的思维,也可以使代码整洁。
使用map则是方便,不需要新建对象。
两种方法视情况使用。
假如我们有2个变量count和content需要经过一个方法里改变它的值我们可以用下面的方法:
main{
int count=0;
String content=“”;
changeValue(count,content);
System.out.println(count);
System.out.println(content);
}
private void changeValue(int count,String content){
count++;
content="new content";
}
但是这种写法很不友好, 我们最好不用返回值当作参数。因为这样变量的作用域不明显,而且容易混乱。
最好是 每个方法返回我们需要改成的值。
但是如果涉及到多参数参与变化的方法时怎么办呢?
可以使用map来进行封装再一起返回:
main{
Map<String, Object> data =changeValue(count,content);
System.out.println(data.get("count"));
System.out.println(data.get("content"));
}
private Map<String, Object> changeValue(int count,String content){
return MapBuilder
.forType(String.class, Object.class)
.with("count", count++)
.with("content", "new content")
.build();
}
package com.test.util;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* Map构造器
*
*
*/
public final class MapBuilder<K, V> {
private Map<K, V> map;
private MapBuilder() {
map = new HashMap<K, V>();
}
/**
* create a builder
*
* @return
*/
public static <K, V> MapBuilder<K, V> create() {
return new MapBuilder<K, V>();
}
/**
* create a builder
*
* @param kClass key type
* @param vClass value type
*/
public static <K, V> MapBuilder<K, V> forType(Class<K> kClass, Class<V> vClass) {
return new MapBuilder<K, V>();
}
/**
* create a builder and put a kv pair.
*
* @param key
* @param value
* @return
*/
public static <K, V> MapBuilder<K, V> createWith(K key, V value) {
return new MapBuilder<K, V>().with(key, value);
}
/**
* put 键值对
*
* @param key 键
* @param value 值
* @return
*/
public MapBuilder<K, V> with(K key, V value) {
map.put(key, value);
return this;
}
/**
* 方法名称意义不明,放弃使用<br>
* 兼容过时代码,暂不删除。
*
* @param key
* @param value
* @return
*/
@Deprecated
public static <K, V> MapBuilder<K, V> makeNew(K key, V value) {
return createWith(key, value);
}
/**
* put 键值对 {@link #with(Object, Object)}
*
* @param key 键
* @param value 值
* @return
*/
@Deprecated
public MapBuilder<K, V> make(K key, V value) {
return with(key, value);
}
/**
* 构造Map对象
*
* @return 不可再修改的map
*/
public Map<K, V> build() {
return Collections.unmodifiableMap(map);
}
/**
* 返回原生Map对象
*
* @return
*/
public Map<K, V> original() {
return map;
}
}
相关文章推荐
- java规范(一)------方法设计---返回多参数的方法怎么封装
- Java方法参数太多怎么办—Part6—方法返回值
- Java方法参数太多怎么办—Part6—方法返回值
- Java方法参数太多怎么办—Part5—方法命名
- 在一个java方法中如何返回两个参数的值?
- Java中类的继承,属性和方法的四种修饰符的作用范围,final关键字,java的三大特点中的2个:封装和多态,以及多态的一个设计模式,模板方法模式(template method)
- 参数和返回类型的设计规范
- Java方法参数太多怎么办—Part 1—自定义类型
- java 方法参数过多,怎么处理?
- 自己动手设计java web框架(三)-执行请求路径所对应方法并返回
- JAVA 类中方法参数与返回值
- java基础七(成员变量 局部变量 匿名对象 封装 设计原则 private this 构造方法 static)
- Java方法参数太多怎么办—Part4—重载
- Java方法参数太多怎么办—Part 2—引入参数对象
- Java方法参数太多怎么办—Part4—重载
- java返回多参数方法与方法的多参数传递
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java myeclipse怎么往main方法传参数啊
- Java方法参数太多怎么办—Part 7—可变状态变量
- Java 返回数组或集合的方法设计