эм, и как от него избавиться? Как тогда сравнивать объекты?Если есть возможность откажись от применения метода compareTo(T o). Тогда отпадет необходимость экстендиться от интерфейса и приводить типы много раз.
public class ArrayVector<T extends Number & Comparable> {
private T[] element;
public ArrayVector(int size) {
element = (T[])new Number[size];
}
public T get(int index) {
return element[index];
}
public void set(int index, T value) {
element[index] = value;
}
public int size() {
return element.length;
}
public T min() {
T min = this.get(0);
for (int i = 0; i < this.size(); i++) {
if (min.compareTo(this.get(i)) > 0) {
min = this.get(i);
}
}
return min;
}
public static void main(String args[]){
ArrayVector<Double> vector = new ArrayVector<Double>(5);
for (int i = 0; i < vector.size(); i++){
vector.set(i,Math.random()*100);
System.out.println(vector.get(i));
}
System.out.println("min = " + vector.min());
}
}
эм, и как от него избавиться? Как тогда сравнивать объекты?
так работает, без постоянного приведения типа. Но, это не совсем то.
2Hamster
не хочется постоянно приводить типы. По-другому никак сделать нельзя?
import java.util.*;
public class ArrayVector<T> {
private T[] element;
@SuppressWarnings("unchecked")
public ArrayVector(int size) {
element = (T[]) new Object[size];
}
public T get(int index) {
return element[index];
}
public void set(int index, T value) {
element[index] = value;
}
public int size() {
return element.length;
}
/**
* Вариант 1.
* Поскольку в общем случае элементы ArrayVector несравнимы
* минимум описываем внешней функцией, которая ставит ограничения
* на тип элемента.
*/
public static <T extends Comparable<? super T>> T min(ArrayVector<T> vector) {
T min = vector.get(0);
for (int i = 0; i < vector.size(); i++) {
if (min.compareTo(vector.get(i)) > 0) {
min = vector.get(i);
}
}
return min;
}
/**
* Вариант 2.
* Используем внешний компаратор.
*/
public T min(Comparator<? super T> comparator) {
T min = get(0);
for (int i = 0; i < size(); i++) {
if (comparator.compare(min, get(i)) > 0) {
min = get(i);
}
}
return min;
}
public static void main(String args[]){
ArrayVector<Double> vector = new ArrayVector<Double>(5);
for (int i = 0; i < vector.size(); i++){
vector.set(i,Math.random()*100);
System.out.println(vector.get(i));
}
System.out.println("min = " + min(vector));
System.out.println("min = " + vector.min(new NativeComparator<Double>()));
}
static class NativeComparator<T extends Comparable<? super T>> implements Comparator<T> {
public int compare(T t1, T t2) {
return t1.compareTo(t2);
}
}
}
как с этим бороться ?ERROR: 'Software caused connection abort: socket write error'
<Root>
<Command>showMessage</Command>
<Message>Hello World!</Message>
</Root>
public void parseXMLFromServer(InputStream is)
throws ParserConfigurationException, SAXException, IOException{
Document doc = getDocument(is);
Element root = doc.getDocumentElement();
String command =
root.getElementsByTagName("Command").item(0).getFirstChild().getNodeValue();
if (command.equals("showMessage")) {
String message =
root.getElementsByTagName("Message").item(0).getFirstChild().getNodeValue();
System.out.println(message);
}
}
public Document getDocument(InputStream is) throws ParserConfigurationException, SAXException, IOException {
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setValidating(false);
DocumentBuilder builder = f.newDocumentBuilder();
return builder.parse(is);
}
Software caused connection abort часто возникает, когда клиент пытается читать из уже закрытого другим концом соединения.как с этим бороться ?
Сервер что-то ждет в строчке Document doc = builder.parse(is);//out = socket.getOutputStream();
Transformer t = TransformerFactory.newInstance().newTransformer();
t.transform(new DOMSource(doc), new StreamResult(out));
DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
f.setValidating(false);
DocumentBuilder builder = f.newDocumentBuilder();
Document doc = builder.parse(is);
, вывести хмл на консоль, то все правильно выводится.//out = socket.getOutputStream();
Transformer t = TransformerFactory.newInstance().newTransformer();
t.transform(new DOMSource(doc), new StreamResult(System.out));
Ну так есть там этот flush или нет?такое чувство, что на клиенте не хватает что-то по типу out.flush();
Нету, т.к. если написатьНу так есть там этот flush или нет?
илиout.flush();
Transformer t = TransformerFactory.newInstance().newTransformer();
t.transform(new DOMSource(doc), new StreamResult(out));
толку нет. Не работает. Подсказали, чтоTransformer t = TransformerFactory.newInstance().newTransformer();
t.transform(new DOMSource(doc), new StreamResult(out));
out.flush();