wget
не поддерживает шаблон / шаблон в опции -O
(заглавная буква O, BTW). Таким образом, вы можете сделать несколько хитростей, например сначала поместить файл во временный каталог, а затем переименовать его с помощью оболочки. Что-то вроде:
for i in {1..50};
do
mkdir $i && cd $i && \
wget --content-disposition `http://example.com/getfile.php?id={$i}` && \
for fn in *; do mv "$fn" "../$i-$fn" && cd .. && rmdir $i; done
done
Примечание: не проверено.
Я думаю, что использовал бы шаблон делегации - делают класс ImmutableDate с единственным членом DateBean, который должен быть указан в конструкторе:
public class ImmutableDate implements DateBean
{
private DateBean delegate;
public ImmutableDate(DateBean d)
{
this.delegate = d;
}
public Date getDate()
{
return delegate.getDate();
}
}
Если когда-нибудь я должен вызвать неизменность на DateBean d, я просто новый ImmutableDate (d) на нем. Я, возможно, был умен и удостоверился, что не делегировал делегата, но Вы получаете идею. Это избегает проблемы клиента, пытающегося бросать его во что-то изменяемое. Это во многом как JDK, делает с Collections.unmodifiableMap () и т.д. (в тех случаях, однако, функции мутации все еще должны быть реализованы и кодируются для выдачи исключения на этапе выполнения. Намного легче, если у Вас есть основной интерфейс без мутаторов).
Все снова и снова это - утомительный шаблонный код, но это - вид вещи, которую хороший IDE как Eclipse может автоматически сгенерировать для Вас всего несколькими щелчками мышью.
Если это - вид вещи, Вы заканчиваете тем, что делали к большому количеству объектов области, Вы могли бы хотеть рассмотреть использование динамических прокси или возможно даже AOP. Было бы относительно легко затем создать прокси для любого объекта, делегировав все получить методы, и захватив или игнорируя методы установки как соответствующие.
Я использую интерфейсы и бросающий для управления переменчивостью бобов. Я не вижу серьезных оснований для усложнения моих объектов области с методами как getImmutableInstance()
и getMutableInstance()
.
Почему не только используют наследование и абстракцию? например.
public interface User{
long getId();
String getName();
int getAge();
}
public interface MutableUser extends User{
void setName(String name);
void setAge(int age);
}
Вот то, что будет делать клиент кода:
public void validateUser(User user){
if(user.getName() == null) ...
}
public void updateUserAge(MutableUser user, int age){
user.setAge(age);
}
Это отвечает на Ваш вопрос?
yc
Некоторые комментарии (не обязательно проблемы):
например.
public interface DateBean {
public Date getDate();
}
public class ImmutableDate implements DateBean {
private final long date;
ImmutableDate(long date) {
this.date = date;
}
ImmutableDate(Date date) {
this(date.getTime());
}
ImmutableDate(DateBean bean) {
this(bean.getDate());
}
public Date getDate() {
return new Date(date);
}
}
public class MutableDate implements DateBean {
private long date;
MutableDate() {}
MutableDate(long date) {
this.date = date;
}
MutableDate(Date date) {
this(date.getTime());
}
MutableDate(DateBean bean) {
this(bean.getDate());
}
public Date getDate() {
return new Date(date);
}
public void setDate(Date date) {
this.date = date.getTime();
}
}