Архитектура SQL для обработки компетенций сотрудников

Статические методы рассматриваются как глобальные JVM, они вообще не связаны с экземпляром объекта.

Это может быть концептуально возможно, если вы могли бы вызвать статические методы из объектов класса (например, на таких языках, как Smalltalk), но это не так на Java.

EDIT

Вы можете перегрузить статический метод, это нормально. Но вы не можете переопределить статический метод, потому что класс не является первоклассным объектом. Вы можете использовать отражение, чтобы получить класс объекта во время выполнения, но объект, который вы получаете, не параллелен иерархии классов.

class MyClass { ... }
class MySubClass extends MyClass { ... }

MyClass obj1 = new MyClass();
MySubClass obj2 = new MySubClass();

ob2 instanceof MyClass --> true

Class clazz1 = obj1.getClass();
Class clazz2 = obj2.getClass();

clazz2 instanceof clazz1 --> false

Вы можете размышлять над классами, но он останавливается там. Вы не вызываете статический метод, используя clazz1.staticMethod(), но используя MyClass.staticMethod(). Статический метод не привязан к объекту и, следовательно, не существует понятия this или super в статическом методе. Статический метод - глобальная функция; как следствие, также нет понятия полиморфизма, и поэтому переопределение метода не имеет смысла.

Но это возможно, если MyClass был объектом во время выполнения, на котором вы вызываете метод, как в Smalltalk (или, может быть, JRuby, как один комментарий, но я ничего не знаю о JRuby).

О да ... еще одна вещь. Вы можете вызвать статический метод через объект obj1.staticMethod(), но это действительно синтаксический сахар для MyClass.staticMethod(), и его следует избегать. Обычно это вызывает предупреждение в современной среде IDE. Я не знаю, почему они когда-либо допускали этот ярлык.

2
задан Didzis 18 January 2019 в 13:20
поделиться

2 ответа

Чтобы выбрать всех программистов из базы данных, используйте, например:

SELECT
 e.name AS empl_name,
 c.name AS comp_name
FROM 
  employee_competency ec,
  competencies c,
  employee e
WHERE
  c.id=ec.competency_id
AND
  e.id=ec.employee_id
AND
  c.id=3
0
ответ дан mscdeveloper 18 January 2019 в 13:20
поделиться

Ключевой идеей здесь является то, что у вас должен быть этот список, который позволит вам выбрать компетенцию, которая также будет зависеть от данных. Таким образом, когда вы находитесь на экране / форме / странице, где вы выбираете компетенцию для списка, вы управляете этим выбором с помощью таблицы компетенций в базе данных, передавая идентификатор компетенции в качестве значения выбора обратно в ваш запрос. так что вы можете запросить список сотрудников по компетенции.

Вы никогда не должны вводить индивидуальные идентификаторы в систему. Теперь это становится сложным, когда у вас есть поведение, которое вы хотите вести на основе компетенции. Это требует мышления на более высоком уровне абстракции. Например, допустим, у вас есть форма, в которой вы хотите показать еще одну вкладку, чтобы позволить клиенту выбрать, на каких самолетах сертифицирован пилот. Чтобы управлять этим, я обычно создаю флаги, которые фактически определяют поведение вождения (например, CAN_SELECT_PLANES) для добавления в связанную таблицу. Эта таблица определяет возможности системы, а не компетенции. Важно сохранить эту абстракцию, потому что клиенты захотят изменить название своей компетенции, и позже вы найдете новые варианты использования этой функции.

0
ответ дан Rob Conklin 18 January 2019 в 13:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: