Я был удивлен инициализаторами экземпляра на днях. Я удалял некоторые свернутые кодом методы и закончил тем, что создал несколько инициализаторов экземпляра:
public class App {
public App(String name) { System.out.println(name + "'s constructor called"); }
static { System.out.println("static initializer called"); }
{ System.out.println("instance initializer called"); }
static { System.out.println("static initializer2 called"); }
{ System.out.println("instance initializer2 called"); }
public static void main( String[] args ) {
new App("one");
new App("two");
}
}
Выполнение main
метод отобразится:
static initializer called
static initializer2 called
instance initializer called
instance initializer2 called
one's constructor called
instance initializer called
instance initializer2 called
two's constructor called
я предполагаю, что они были бы полезны, если бы Вы имели несколько конструкторов и нуждались в общем коде
, Они также обеспечивают синтаксический сахар для инициализации Ваших классов:
List<Integer> numbers = new ArrayList<Integer>(){{ add(1); add(2); }};
Map<String,String> codes = new HashMap<String,String>(){{
put("1","one");
put("2","two");
}};
Вы можете попробовать это
DECLARE @Table TABLE(
ID INT,
ParentID INT,
NAME VARCHAR(20)
)
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 1, NULL, 'A'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 2, 1, 'B-1'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 3, 1, 'B-2'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 4, 2, 'C-1'
INSERT INTO @Table (ID,ParentID,[NAME]) SELECT 5, 2, 'C-2'
DECLARE @ID INT
SELECT @ID = 2
;WITH ret AS(
SELECT *
FROM @Table
WHERE ID = @ID
UNION ALL
SELECT t.*
FROM @Table t INNER JOIN
ret r ON t.ParentID = r.ID
)
SELECT *
FROM ret
Если вы не используете Oracle, ваша структура таблицы не подходит для описанной проблемы. Что вы пытаетесь сделать, так это захватить иерархию (пройти по древовидной структуре).
Есть статья More Trees & Hierarchies in SQL , в которой описывается один метод решения проблемы иерархии. По сути, он добавляет столбец «происхождение» с описанием иерархии к каждой строке.