2013-08-23 2 views
0

이와 같이 Point 클래스를 정의했습니다.일반 데이터에서 값을 빼는 방법

class Point<E,F> {E x; E y; ...} 

내가 플로트를 제공 할 수 있도록, 정수 ... [어쨌든 그 숫자]

하지만 난 그에게 오류를 조작 할 때.

void getdistance(Point<Number, Number> pt) { 
    this.x-pt.x.floatValue(); //not a statement 
    this.y-pt.y.floatValue(); 
} 

또한 유형으로 문자열을 주어서는 안되며, Number로 변경해야합니까? 또는 제네릭 유형과의 거리를 계산하는 다른 방법은 없습니까?

하지만 형식을 숫자로 변경하면 어떻게 다른 좌표 형식 [float 또는 integer]을 지정할 수 있습니까?

여기에 유추하는 방법은 무엇입니까?

this.y-pt.y.TypeValue? 

정수 또는 두 배인 경우 어떻게 할 수 있습니까?

제가

pt.getdistance(otherpt); 

컴파일러 보여 통과 할 때 오차 : 메소드 getdistance (float의 정수)을 생성한다. 방법을 다른 지점을 전달하는 방법?

답변

1

당신은 그들이 함께 번호를 확장해야 유형을 알 수 있습니다 : Point<E extends Number, F extends Number> :

<T extends Number, T1 extends Number> 

이 방법 당신은 등

3

시도 플로트와 같은 요점을 정의 통과 할 수 있습니다. 그런 식으로 컴파일러는 EF이 모두 숫자임을 알 수 있습니다. 유형을 혼합하는 것은 나에게 매우 이상한 것 같다 -

그러나, 당신도 (DoubleInteger 등 즉) 가능성이 가장 높은 두 좌표가 동일한 유형이어야하기 때문에 Point<N extends Number>에 그를 단순화 할 수 있습니다. 따라서 당신이 확인해야 할 것, X

<X extends Number, Y extends Number> float getdistance(Point<X, Y> pt) { 
    float dx = this.x.floatValue() - pt.x.floatValue(); 
    float dy = this.y.floatValue() - pt.y.floatValue(); 

    return (whatever your distance calculation needs to look like); 
} 

주와 y는 null 수 있습니다

방법은 조정되어야 할 것이다. 여기서 XY을 지정하면 Point<Float, Integer>Point<Double, Long> 멤버 메소드에 전달할 수 있습니다. 여기서 EF을 다시 정의 할 수 있지만 이는 혼동의 원인 일 수 있습니다.

편집 : 심지어 double 정확하게 할 수 없을 것이기 때문에,

floatValue() 또는 doubleValue() 정밀도의 손실이 발생할 수 있습니다 사용 :

내가 마크 피터스 '의견에 약간의 정교한 것이다 각각 long 값을 나타냅니다. 따라서 특히 더 높은 숫자로 심각한 정밀 손실을 경험할 수 있습니다.

또한 BigIntegerBigDecimal도 숫자이며 그 정확도는 훨씬 높습니다.

최대 정밀도를 얻기 위해, 당신은 계산에서 BigDecimal를 사용해야 할 것 초기 값을 생성 할 때 적절한 방법 값의 유형을 확인하고 전화를해야 할 것 :

  • Byte, Short, IntegerLong을 위해 당신은 당신이 전화 것 DoubleFloat에 대한 BigDecimal.valueof(x.longValue())
  • 를 호출 것 BigDecimal.valueof(x.doubleValue())
  • BigDecimal
  • BigIntegerBigDecimal 생성자

이 복잡성의 꽤를 추가하고이 경우 대신 하위 클래스 Point의 arshajii의 제안에 가고 싶어 수도에 전달 될 것입니다로 사용할 수 있습니다.

+0

두 좌표 모두 'E'유형으로 선언됩니다 ('F'가 들어오는 지 모르겠습니다). – arshajii

+0

그의 예제 메서드 매개 변수는'Point '이므로'E'와'F'는 x와 y의 타입을 의미합니다. – Thomas

+0

나는 그것이 다르기를 바랄 것이다. Dineshkumar

관련 문제