Если это была проблема с пространством имен, есть возможность попытаться изменить две вещи в файле xslt:
& lt; xsl: stylesheet version = 1.0 "xmlns: xsl =" http://www.w3.org/1999/XSL/Transform "xmlns: xs =" http://www.w3.org/2001/XMLSchema "xmlns: my =" http: / /www.w3.org/2001/XMLSchema"> & lt; xsl: template match = "/" & gt; & lt; soap: Envelope xsl: version = "1.0" xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance" xmlns: xsd = "http://www.w3.org/2001/ XMLSchema "xmlns: soap =" http://schemas.xmlsoap.org/soap/envelope/ "& gt; & Lt; мыло: Тело & GT; & lt; NewRoot xmlns = "http://wherever.com" & gt; & Lt; NewChild & GT; & Lt; ChildID & GT; ABCD & л; / ChildID & GT; & Lt; ChildData & GT; & lt; xsl: значение - select = "/ my: MyRoot / my: MyChild1 / my: MyData" / & gt; & Lt; / ChildData & GT; & Lt; / NewChild & GT; & Lt; / NewRoot & GT; & Lt; / мыло: Тело & GT; & Lt; / мыло: Конверт & GT; & Lt; / XSL: шаблон & GT; & Lt; / XSL: стилей & GT;
Компилятор предупреждает вас, что quantit
никогда не инициализируется и всегда будет null
.
Вероятно, вы должны инициализировать его экземпляром класс, который происходит из ImageManipulation.Quantizer
(вы не можете создать экземпляр Quantizer
, потому что это абстрактный класс):
private static Quantizer quantit = new QuantizerImplementation ();
Доступ к статическим элементам осуществляется через имя типа, т. е.
Quantization.quantit = {некоторое значение};
Конечно, поскольку он является частным, вам нужно было бы это сделать изнутри типа, и в этом случае вы можете просто использовать:
quantit = {some стоимость};
Однако я бы также поставил вопрос, является ли статический параметр подходящим здесь, особенно если вы выполняете какую-либо нить (или веб-код). Статический часто злоупотребляют (и используются ненадлежащим образом).
Вы никогда не назначаете экземпляр класса Quantizer
вашей статической переменной quantit
, поэтому он останется ссылкой null
и будет генерировать это исключение, когда вы попытаетесь использовать один из его методов. Чтобы устранить проблему, просто инициализируйте этот элемент с помощью нового объекта Quantizer
перед его использованием.
Кстати, я не уверен, что вы хотите, чтобы эта переменная была static
.
Edit
Я только что увидел, что Quantizer
является абстрактным классом ... тогда вы не можете его инстанцировать напрямую, у вас есть first , чтобы извлечь свой конкретный класс из него, реализуя методы abstract
(а именно QuantizePixel
и GetPalette
) или используйте другой готовый класс, полученный из Quantizer
, а затем инициализирует поле quantit
новым экземпляром такого класса.
Статическое поле - это просто поле, значение которого разделяется всеми. Подумайте об этом как о глобальной переменной. Дело в том, что вам все равно нужно создать экземпляр, по крайней мере, один раз. Обычно это делается в одно и то же время / место, чем декларация.
public static Quantizer quantit = new Quantizer (?);
Я мало знаю о том, что вы хотите сделать, но я не думаю, что вы действительно хотите использовать статическое поле здесь. Я предполагаю, что вы хотите создать / создать новый экземпляр Quantizer на основе некоторого входного параметра (singlePass или doublePass). Если класс Quantizer не имеет состояния, вы должны сделать его одиночным. Если вы захотите сделать это, я предлагаю вам посмотреть контейнеры Dependency Injection, такие как Castle Windsor, которые могут легко справиться с этим для вас.