jdbcTemplate.execute(" CREATE TABLE test (id BIGINT PRIMARY KEY, test_id VARCHAR(50));");
Map<String, String> parameters = new HashMap();
parameters.put("test_id", "test");
jdbcTemplate2.execute(
"INSERT INTO test (id, test_id) VALUES (1, :test_id)",
parameters,
(PreparedStatementCallback) PreparedStatement::executeUpdate
);
A <- B
, поотом B <- C
// Join and predicate ontSerialNumber from Subscriber NeProfile
Optional.ofNullable(requestAssuranceAccessLine.getOntSerialNumber()).ifPresent(ontSerialNumber -> {
Join<DefaultNeProfile, AccessLine> joinedDefaultNeProfile = root.join("defaultNeProfile");
Join<SubscriberNeProfile, DefaultNeProfile> joinedSubscriberNeProfile = joinedDefaultNeProfile.join("subscriberNeProfile");
predicates.add(criteriaBuilder.equal(joinedSubscriberNeProfile.get("ontSerialNumber"), ontSerialNumber));
}
);
private void parse() {
String currentElement = "";
String[] elements = regular.split(" ");
double number1, number2, interAns;
for (int i = 0; i < elements.length; i++) {
currentElement = elements[i];
// Check if current element is operator
if (isOperator(currentElement)) {
if (stack.size() > 1 && !currentElement.equals("")) {
number2 = stack.pop();
number1 = stack.pop();
// Make calculations
if (currentElement.equals("+"))
interAns = number1 + number2;
else if (currentElement.equals("-"))
interAns = number1 - number2;
else if (currentElement.equals("*"))
interAns = number1 * number2;
else if (currentElement.equals("/"))
interAns = number1 / number2;
else interAns = 0;
stack.push(interAns);
}
} else {
try {
double element = Double.parseDouble(currentElement);
stack.push(element);
} catch (NumberFormatException e) {
System.out.println("Hmm...");
}
}
/*
try {
double element = Double.parseDouble(currentElement);
stack.push(element);
} catch (NumberFormatException e) {
if (!currentElement.equals("")) {
number2 = stack.pop();
number1 = stack.pop();
// Make calculations
if (currentElement.equals("+"))
interAns = number1 + number2;
else if (currentElement.equals("-"))
interAns = number1 - number2;
else if (currentElement.equals("*"))
interAns = number1 * number2;
else if (currentElement.equals("/"))
interAns = number1 / number2;
else interAns = 0;
stack.push(interAns);
}
}*/
}
interAns = stack.pop();
result = interAns;
}
// Новая функция
private boolean isOperator(String s) {
return s.equals("+")|| s.equals("-") || s.equals("*") || s.equals("/");
}
infix: 12 - 5 * 2 + 16 / 4 - 50 / 10
(postfix is 12 5 2 * - 16 4 / + 50 10 / -
) - не совсем понимаю почему, но стоило мне поменять местами сравнения, так всё сразу заработало!if (stack.size() > 1) ...
). 1 + 2*3
(2 - 4) / 5
9/2 - 3/4
g.set("String"); f.set(123);
class Test<T> {
T val; // на самом деле T заменяется на Object
Test(T o) { val = o; }
T get() { return val; }
}
class SimpleClass {
void info() { System.out.println("я метод info() из класса SimpleClass"); }
}
Test<SimpleClass> v = new Test<>(new SimpleClass());
SimpleClass v2 = v.get(); // при инициализации v2 на самом деле происходит неявное нисходящее преобразование к нужному типу
//что происходит на самом деле:
//SimpleClass v2 = (SimpleClass) v.get();
v2.info();
Стирание генерализированных типов происходит на стадии компиляции. В самом простом случае ничем не ограниченный тип стирается до Object`а, обобщенный класс NameClass до NameClass.
Другими словами информация о дженериках существует только на этапе компиляции и недоступна в runtime.