嘿,我刚刚开始学习 Java,因为我将 很快参加一门类(class)(是的,我是个 Nerd ,我在开始上课之前学习)。我想将一些概念拼凑在一起,以了解 Java 中的一切是如何协同工作的。
现在,我想尝试做的是一个简单的 Shape(法语为 Forme)类,它至少有 1-2 个类继承自它,并在集合对象中创建一些实例。我也想让这些类泛型来尝试一下。这是我遇到问题的部分。
我非常习惯 C++,所以这可能是混淆的地方,但似乎我不能使用泛型,因此,例如,我可以指定维度将在 Integer 或 Double 或漂浮什么的。可能吗?
由于 base
和 hauteur
,下面的 GetArea() 方法无法编译。
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>());
}
}
请注意,由于类型问题,我也无法在构造函数中对 0 进行赋值。
此外,我知道有非常相似的主题,但我还没有在其他问题中找到解决我的问题的方法。
TLDR 如何使用原始类型包装器(Double、Integer..)来实现泛型?
最佳答案
所以我猜你的问题是这一行:
Double GetArea() { return base * hauteur / 2; }
您收到错误的原因是 *
运算符对于 Number
类型的对象未定义。由于您知道您将处理 int
和 double
(我假设),您可以尝试这样做:
Double GetArea() { return base.doubleValue() * hauteur.doubleValue() / 2; }
请注意,通常我们以小写字母开头的方法名称,即 getArea()
。
关于java - 在 Java 和数字类型中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12754010/