현재 Java의 제네릭에 대해 배우고 있습니다. C++에서 상당히 차이가 있습니다. C++에서 벡터 추가를 원합니다. 이렇게 보일 것입니다. 나는 자바와 동일한 작업을 수행하려고Java에서 두 개의 제네릭 추가 (캐스트가 작동하지 않음)
#include <iostream>
#include <vector>
template <typename T>
class Vect{
public:
std::vector<T> vect;
Vect(std::vector<T> t){vect = t;}
T index(int i){return vect[i];}
void print(){
for(int i = 0; i < vect.size(); ++i){
std::cout << vect[i] << " ";
}
std::cout << std::endl;
}
void add(Vect<T> other){
for(int i = 0; i < vect.size(); ++i){
vect[i] = vect[i]+other.index(i);
}
}
};
int main(){
std::vector<int> p1;
p1.push_back(1);
p1.push_back(2);
p1.push_back(3);
p1.push_back(4);
Vect<int> vec1 = Vect<int>(p1);;
Vect<int> vec2 = Vect<int>(p1);;
vec1.print();
vec2.print();
vec1.add(vec2);
vec1.print();
return 0;
}
(이 코드가 잘 기록되지 않습니다 것을 알고, 내가하고 싶은 것을 보여주기 위해 그냥 빨리 예입니다)하지만 난 방법을 얻을 수 없다 두 제네릭 T를 추가하고 첫 번째 벡터에 값 (a T)을 넣으십시오. 그래서 이중 인쇄 않습니다
public class Vect0<T extends Number> {
//Attributs
private T[] _vec;
//Constructeur
public Vect0(T[] vec){
System.out.println("Construction du _vec !");
_vec = vec;
}
//Getter
public int get_length() {
return _vec.length;
}
//Methodes
public void print(){
System.out.print("[");
for (int i = 0; i < _vec.length; ++i){
if (i != _vec.length-1) {
System.out.print(_vec[i] + ", ");
}
else {
System.out.print(_vec[i]);
}
}
System.out.println("]");
}
public T index(int i) {
return _vec[i];
}
public void sum(Vect0<T> other) {
if (other.get_length() == this.get_length()) {
for(int i = 0; i < this.get_length(); ++i) {
Double res = (this.index(i).doubleValue() + other.index(i).doubleValue());
System.out.print(res);
T t = (T) res;
_vec[i] = t;
}
}
}
}
을,하지만 캐스팅이 작동하지 않습니다 나는 오류 얻을 : 나는이 일을하고 스레드 "주요"java.lang.ArrayStoreException에서
예외 : Main.main (Main.java:12)에서 Vect0.sum (Vect0.java:37)에서 java.lang.Double에
난 당신이 날이 알아낼 도움이 될 수 있기를 바랍니다. 대단히 감사합니다.
당신이 Vect0에 두 배를 저장하기 위해 찾고있는 타입인가? –
jzarob
@jzarob 아니, 이상적으로 나는 두 개의 T 1과 T t2를 더하고 t 1에 결과를 저장하려고했지만 '+'는 Number에 정의되어 있지 않으므로 작동하지 않습니다. C++과 비교하여 유형 삭제 및 Java가 제네릭을 처리하는 방식 때문이라고 생각하십니까? – Culpeo