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

标签 java generics

嘿,我刚刚开始学习 Java,因为我 很快参加一门类(class)(是的,我是个 Nerd ,我在开始上课之前学习)。我想将一些概念拼凑在一起,以了解 Java 中的一切是如何协同工作的。

现在,我想尝试做的是一个简单的 Shape(法语为 Forme)类,它至少有 1-2 个类继承自它,并在集合对象中创建一些实例。我也想让这些类泛型来尝试一下。这是我遇到问题的部分。

我非常习惯 C++,所以这可能是混淆的地方,但似乎我不能使用泛型,因此,例如,我可以指定维度将在 Integer 或 Double 或漂浮什么的。可能吗?

由于 basehauteur,下面的 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 类型的对象未定义。由于您知道您将处理 intdouble(我假设),您可以尝试这样做:

Double GetArea() { return base.doubleValue() * hauteur.doubleValue() / 2; }

请注意,通常我们以小写字母开头的方法名称,即 getArea()

关于java - 在 Java 和数字类型中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12754010/

相关文章:

java - 手动更改进度条颜色

Java:添加 boolean 检查方法来检查 SQL 表中的数据以复制到文本文件

java - HBase 连接为空,缺少依赖项、配置或某些属性

python-3.x - MyPy 不允许受约束的 TypeVar 协变?使用受约束但协变的键值类型定义通用字典

java - 如何在 Java 泛型中获取类型变量的类

c# - 如何在 C# 中传递方法参数作为泛型接口(interface)基类型?

java - 如何在 Java 的标准类中设置通用对象?

Java 8 - 向需要泛型类型的方法提供原始类型参数会导致其返回类型被删除

javax.net.ssl.SSLHandshakeException : sun. security.validator.ValidatorException 错误

java - 在我的 Gradle Java 项目中使用本地 jar 作为依赖项