在Java和数字类型中使用泛型

App*_*Pie 4 java generics

嘿,我刚刚开始学习Java课程,我很快开始学习(是的,我是一个书呆子,我在开始上课前学习).我想把几个概念放在一起,以了解一切如何在Java中协同工作.

现在,我想要尝试做的是一个简单的Shape(Forme in french)类,它至少有1-2个类继承自它,并在集合对象中创建一些实例.我也想让那些类泛型也尝试一下.那是我遇到麻烦的部分.

我已经习惯了C++,所以这可能是混乱的地方,但似乎我不能使用泛型,所以,例如,我可以指定尺寸将在,例如,Integer或Double或Float或其他.可能吗 ?

由于base和,下面的GetArea()方法无法编译hauteur.

package testconcepts;

import java.util.*;
import java.lang.*;

abstract class Forme <T extends Number> {
    protected String nom_forme;

    String NomForme() { return nom_forme; }

    abstract Double GetArea();
}

class Triangle <T extends Number> extends Forme {
    protected T base, hauteur;

    Triangle() { 
        this.nom_forme = "TRIANGLE"; 
    }

    @Override
    Double GetArea() { return base * hauteur / 2; }

    T GetBase() { return base; }
    T GetHauteur() { return hauteur; }
    void SetBase(T base) { this.base = base; }
    void SetHauteur(T hauteur) { this.hauteur = hauteur; }
}

public class TestConceptsJava {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        list.add(new Triangle<Double>());
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,由于类型问题,我也无法在构造函数中将赋值赋值为0.

此外,我知道有非常相似的主题,但我还没有找到解决我的问题的其他问题.

TLDR如何使用基本类型包装器(Double,Integer ..)创建工作泛型?

ars*_*jii 6

所以你的问题就在这一行我猜:

Double GetArea() { return base * hauteur / 2; }
Run Code Online (Sandbox Code Playgroud)

收到错误的原因是因为*对于类型的对象未定义运算符Number.既然你知道你将处理ints和doubles(我假设),你可以试试这个:

Double GetArea() { return base.doubleValue() * hauteur.doubleValue() / 2; }
Run Code Online (Sandbox Code Playgroud)

作为注释,通常我们使用小写字母开始方法名称,即getArea().