Java и изменение сторонних классов
Захотелось изменить сторонний класс, подключаемый как import org.openqa.selenium.interactions.Actions; Другими словами, подключение идет из стороннего источника и я никак не могу редактировать его... Если бы мог, я бы тут не сидел...
Появилась идея создать свой класс в проекте, и скопировав туда код исходника, переименовав имена функций и т.п., создать его копию, но, как вы понимаете, ничего не работает )))
Отсюда вопросы:
Вопрос 1
В классе Actions подключаются сторонние библиотеки, соответственно, если класс рабочий, то подключены все необходимые библиотеки.
import java.time.Duration;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.function.IntConsumer;
import java.util.logging.Logger;
import org.openqa.selenium.Keys;
import org.openqa.selenium.UnsupportedCommandException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.PointerInput.Kind;
import org.openqa.selenium.interactions.PointerInput.MouseButton;
import org.openqa.selenium.interactions.PointerInput.Origin;
import org.openqa.selenium.interactions.internal.MouseAction.Button;
Тогда почему компилятор ругается на неизвестные ему классы ?
private final Map<**InputSource, Sequence**> sequences = new HashMap();
private final **PointerInput** defaultMouse;
private final **KeyInput** defaultKeyboard;
private final **Keyboard** jsonKeyboard;
private final **Mouse** jsonMouse;
protected **CompositeAction** action;
Вопрос 2
Если подключить все необходимые библиотеки, то появляется ошибка:
'size()' is not public in 'org.openqa.selenium.interactions.Sequence'. Cannot be accessed from outside package в функции
private Sequence getSequence(InputSource source) {
Sequence sequence = (Sequence)this.sequences.get(source);
if (sequence != null) {
return sequence;
} else {
int longest = 0;
Sequence examining;
for(Iterator var4 = this.sequences.values().iterator(); var4.hasNext(); longest = Math.max(longest, examining.size())) {
examining = (Sequence)var4.next();
}
sequence = new Sequence(source, longest);
this.sequences.put(source, sequence);
return sequence;
}
}
Если данный метод (examining.size()) не является публичным, то как он работает в классе оригинала?
Ответы (2 шт):
Онo там работает, потому что они в одном пакете (package) и поэтому имеют доступ к элементам друг друга с модификаторoм доступа по умолчанию.
Как Вы собираетесь использовать этот копию-класс?
Насколько я вижу, этот класс не отмечен как final. А значит, вы можете создать свой класс, наследоваться от этого класса и переопределить нужные вам методы. В них же вы можете вызывать методы класса-родителя вот так: super.someMethod(). Не получится переопределить только те методы, которые final.