- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
package gargoyle.xenox.game;
import gargoyle.util.log.Log;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
@SuppressWarnings("rawtypes")
public abstract class Persistent<T extends Persistent> implements Serializable {
private static final long serialVersionUID = 1L;
private File file(final Class<? extends Persistent> clazz) {
return new File(System.getProperty("user.home"), clazz.getName() + ".dat");
}
@SuppressWarnings("unchecked")
final protected T load(final Class<T> clazz) {
ObjectInputStream in;
try {
in = new ObjectInputStream(new FileInputStream(this.file(clazz)));
return (T) in.readObject();
} catch (final IOException e) {
Log.error(e);
} catch (final ClassNotFoundException e) {
Log.error(e);
}
return null;
}
final protected void save(final T o) {
ObjectOutputStream os = null;
try {
os = new ObjectOutputStream(new FileOutputStream(this.file(o.getClass())));
os.writeObject(this);
os.flush();
} catch (final IOException e) {
Log.error(e);
} finally {
try {
if (os != null) {
os.close();
}
} catch (final IOException e) {
Log.error(e);
}
}
}
}
а. замыканий как не было, так и нет - анонимные классы едва заменяют их в извращенном виде
б. директив для компилятора как не было, так и нет (имею ввиду препроцессор и всякое такое). Аннотации это не совсем то, поскольку инфа может быть доступна или недоступна и в рантайме
кстати, аннотации и генерики - это очень вкусно. Я рад, что они появились, особенно генерики.
но вот с ужасом ожидаю, во что превратится 7ая версия - обещали тучу путающего сахара.
да типа новые возможности и тд. но нужно ли это приторное говно в ЯП в принципе?
а компилятор случайным образом выбирает какой вариант многозначного кода выполнять
>> понятность исходного кода
на любом языке можно совершенно непонятную хуиту написать
>>вбивайте свой говнокод на перфокарты
щас, только JVM на перфокартах спаяю
обязательно выложите ее в опенсорс
А он потом изобрел электричество..."</cite>
Помыслите, немножко, абстрактно
i=++i+++i;
сишник имеет мнение на счет того, как должен работать код, даже если компилятор не уверен.
пхпшник не очень уверен как работает его код даже тогда, когда интерпретатор в этом уверен
Если существует 48 способов решить одну и ту же задачу, то языку это только во вред.
правда в жабе например нет делегатов как в C#, которые еще хуже, потому что они -- замаскированное говнецо.
в любом случае жаба, при всем ее минусах, сейчас является наименее дерьмовым языком для целого ряда задач, в основном конечно для энтерпрайз
замыканий слава богу там нет
аннотации -- да, говно и понос, но и без них пока можно.
вот комманда javaee верит в аннотации, потому javaee никто и не использует.
а замыканий, варов, и прочей сишарп поебени там нет
А применение var даёт сокращение кода - разве это плохо?
И как без var с анонимными типами быть?
2) указывать тот ифейс (или базовый класс) который он расширяет (как в жабе)
3) сокращать код это плохо. Потому что код должен быть легко читаемый. Иначе все функции были бы из трех-пяти букв, а переменные -- из одной.
Насчёт анонимных типов, думаю, сказать нечего? ;)
>>Насчёт анонимных типов, думаю, сказать нечего? ;)
я сказал. посмотрите пункт 2. Вы просто видимо не поняли. Потому поясню на пальцах:
то что-то непонятно?
И не вижу анонимного типа в вашем коде.
ЗЫ: тонкостей Жавы не знаю.
Вижу перегруженный метод, но зачем так сделано - хз.
Если будет два объекта Runnable, с разными методами run, то как узнать, какой метод run у какого? Навести мышкой, и появится подсказка??
рассказываю: в моем примере описан анонимный класс с интерфейсом Runnable и методом run, и ссылка на этот анонимный класс имеет тип runnable.
Теперь возьмем типовой пример вара, что бы понять что он -- дерьмо.
Обратимся для этого к microsoft. Ребята из редмонта продемонстрировали свой var таким вот примером:
http://msdn.microsoft.com/en-en/library/bb383973.aspx
какого типа тут item?
правильный ответ -- "я мышку на переменную наведу"?
var был придуман для поддержки linq, и без var действительно linq не сделать, но linq -- это другая, еще более ужасная чем var, гадость)
Ну да, linq - гадость. ФП - гадость, декларативность - гадость, МП - гадость.
Парадокс Блаба, нэ?
>>Парадокс
вовсе нет. просто в мире микрософт принято ссать кипятком от любого изобретения. придумали реестр -- это же гениально!!
отказались от реестра в пользу .config файлов -- это же гениально!!
придумали enterprise library -- это же гениально!!
выбросили ее на помойку -- это же гениально!!
придумали ком -- это же гениально!!
объявили ком говном -- это тоже гениально
наверное по-этому коммерческий энтерпрайз и компании типа яндекса и гугла не спешат пересажиться на дотнет)))
Я перешел на жабу с дотнета вполне осознанно.
Не нужно приписывать мне ПХПные комплексы "если я чего-то непонимаю -- значит это не нужно".
а вот Вам бы наверное следовало изучить еще что нить кроме C#, что бы знать альтернативные подходы к анонимным классам, например)
Дело в чём. Если внезапно в Яве появятся новые плюшки - станете использовать? Наверняка, да.
Если жизнь заставит перейти на Шарп (допустим, больше зарплату предложат, вакансий на жаве не будет) - будете использовать linq и т.п. или будете писать на C# под .net1.1? Думаю, ответ очевиден.
Добавлю. Заставит жизнь перейти на жабу - ныть не буду, что чего-то не хватает - буду работать.
Читали "Совершенный код"?
Там есть чудесная фраза: "программируйте С ИСПОЛЬЗОВАНИЕМ языка а не на языке" . В джаве есть гавняшки, которые я не использую. Например CDI (депенденси инджекшен на аннотациях), потому что я считаю это нарушеним принципов DI.
>>Думаю, ответ очевиден.
Вовсе нет) Если бы мне было пофиг, чем заниматься -- трудовой путь мой был бы куда более прямой.
В независимости от языка и платформы (C# 2.0 мне кстати нравился кроме паричал классов и делегатов) есть вещи которые я объективно считаю злом
Насчет сокращений, что лучше:
var it = container.begin() или
list<map<MegaSuperUltraType<AnotherMegaS uperUltraTypeType>, GigaTera100500Class> >::iterator it = container.begin() ?
компилятору, конечно компилятору