Кратки съвети за java
Тук може да намерите полезни съвети и примери за много ситуации.
Определяне на мястото, откъдето е зареден даден клас
Докато разработваме Java приложения, включващи много външни библиотеки и jar файлове, понякога се случва даден клас да не се държи според очакваното. Тогава е важно да се знае от къде е зареден то клас, за да може да се определи точната му версия. Например, за да се определи файла, от който е зареден класа StrangeClass, просто трябва да се използва следния израз, оценен в съответната среда за изпълнение:URL location = StrangeClass.class.getProtectionDomain().getCodeSource().getLocation();
Генериране на serialVersionUID чрез използване на serialver
За генериране на serialVersionUID на Serializablе класовете може да се използва serialver инструмента от стандартната JDK дистрибуция. За целта е нужно да имате компилирания клас в jar файл или подходяща директорийна структура по пакети. Ето два примера
1. Класът org.example.MySerializable е компилиран в директорията project\bin\org\example\Myserializable.class. В такъв случай използваме следната команда
X:\JDK\bin\serialver -classpath project\bin org.example.MySerializable
2. Класът org.example.MySerializable се намира в jar файла project/lib/myjar.jar. Тогава:
/path/to/JDK/bin/serialver -classpath project/lib/myjar.jar org.example.MySerializable
И в двата случая добавяме генерираното число към класа и прекомпилираме:
private static final long serialVersionUID = 1234572295622776147L;
Динамично прилагане на instanceOf() в Java
Обикновено при проверка дали даден обект е от даден клас, се използва подобна конструкция:
...
if (myObject instanceof MyClass) {
...
Но в случай, че класът се определя динамично по време на изпълнение, този код не е коректен - не може да се използва нещо подобно:
...
Class<?> myClass = Class.forName("MyClass");
if (myObject instanceof myClass) {
...
Правилния начин е:
...
Class<?> myClass = Class.forName("MyClass");
if (myClass.isInstance(myObject)) {
...
Проверка за съществуване на таблица в база данни чрез JDBC
Функцията по-долу проверява дали дадена таблица съществува в базата данни, асоциирана с JDBC връзката. Използвани са само JDBC операции, без използване на таблици, заявки или функции, специфични за определена база данни, за да се постигне по-висока съвместимост.
public boolean isTablePresent(Connection connection, String tableNameToFind) throws SQLException {
DatabaseMetaData dbm = connection.getMetaData();
ResultSet rs = dbm.getTables(null, null, null, null);
boolean result = false;
while (rs.next()) {
String tableName = rs.getString(3);
if (tableNameToFind.equalsIgnoreCase(tableName)) {
result = true;
break;
}
}
rs.close();
return result;
}
Откриване на даден Java class в директория с jar файлове
Ако имате директория с много jar фаилове и искате бързо да намерите този, който съдържа даден клас, ползвайте този скрипт:
findjar.sh:
dir=$1
class=$2
if [ $# -ne 2 ]
then
echo "Usage: `basename $0` <directory> <class>"
exit 1
fi
for file in `find $dir -name *.jar`
do
unzip -t $file | grep $class && echo $file
done
Пример: намиране на jar файл, който съдържа класа MyClass, в директорията /my/jars/folder:
findjar.sh /my/jars/folder MyClass