目录
空白枚举+集合
public enum WeaponType {
SWEAR
}
public class WeaponFactory {
private static final HashMap<WeaponType, Weapon> hashMap = new HashMap<>() {
{
put(WeaponType.SWEAR, new Swear());
}
};
public static Weapon newInstance(WeaponType weaponType) {
return hashMap.get(WeaponType.SWEAR);
}
}
枚举+Supplier
@Getter
@RequiredArgsConstructor
public enum WeaponType {
SWEAR(Swear::new);
private final Supplier<Weapon> weaponConstructor;
}
public class WeaponFactory {
public static Weapon newInstance(WeaponType weaponType) {
return weaponType.getWeaponConstructor().get();
}
}
反射
public class WeaponFactory {
public static Weapon newInstance(Class<? extends Weapon> weaponClass, Object... args) {
Class<?>[] parameters = (Class<?>[]) Arrays.stream(args).map(Object::getClass).toArray();
try {
return weaponClass.getConstructor(parameters).newInstance();
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
}
}
反射+枚举
@Getter
@RequiredArgsConstructor
public enum WeaponType {
SWEAR(Swear.class);
private final Class<? extends Weapon> weaponClass;
}
public class WeaponFactory {
public static Weapon newInstance(WeaponType weaponType, Object... args) {
Class<? extends Weapon> weaponClass = weaponType.getWeaponClass();
Class<?>[] parameters = (Class<?>[]) Arrays.stream(args).map(Object::getClass).toArray();
try {
return weaponClass.getConstructor(parameters).newInstance();
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
throw new RuntimeException(e);
}
}
}
本文探讨了两种在Java中优化对象创建的方法:使用空白枚举结合集合,以及结合Supplier的枚举。通过枚举类型 WeaponType,展示了如何静态初始化Weapon对象并实现工厂方法。同时,引入反射技术,展示了如何根据类名动态创建对象,并通过参数传递实现更灵活的实例化。这些技术在减少代码冗余和提高代码灵活性方面具有重要意义。
1129

被折叠的 条评论
为什么被折叠?



