【问题标题】:Implement typedef in Java [duplicate]在 Java 中实现 typedef [重复]
【发布时间】:2012-02-17 11:19:10
【问题描述】:

我有一个 Time32 类型,在泛型中用作 Work<Time32>,所以我创建了一个 Time32 类。 我也得实现

typedef UInt(5) Time32

这里的 UInt 表示无符号整数。 Java 没有 unsigned int,所以我创建了自己的类。

public class UInt 
{
    private final int size;
    public UInt(int x)
    {
       this.size=x;
    }

    public int getSize() 
    {
        return size;
    }
} 

但我不明白如何在 java 中实现 typedef。请帮忙。谢谢。

我需要保留 UInt 类,因为我还有一些其他变量会使用 Uint,例如 UInt(20) LoadUInt(10) Force

【问题讨论】:

  • 有人可以告诉我如何实现所需的,即 time32 作为通用和 typedef
  • @user 你能告诉我们,这个(5) 应该做什么吗?该语法在我知道的任何语言中都是无效的。

标签: java


【解决方案1】:

由于 Java 中没有 typdef,因此您不能使用它们。最好的近似值可能是这样的:

public class Time32 extends UInt {
    public Time32(){
        super(5);
    }
}

【讨论】:

    【解决方案2】:

    简而言之,你不能。 :( 我正在开发一个库,可以让你在 Java 中做到这一点,但还处于早期阶段。;)

    我只使用int 并确保我知道它的未签名并使用解决方法,或者我使用long 并只在重要时才担心它。

    【讨论】:

    • 您的意思是“确定我知道它已签名”彼得吗?
    • 我的意思是你可以使用 int 作为任何 32 位值,有符号或无符号。 Java 仅支持直接签名,但您可以使用变通方法将其视为未签名。
    • 哎哟。我不确定我会推荐那个。我们过去每天都在 C 中做这样的事情,但在 Java 中似乎很少需要这样做。
    • 同意,通常不需要,因为您可以使用long。如果你真的确实需要一个“无符号”int,你可以做到。
    【解决方案3】:

    java 中没有 typedef(或别名)。 您可以直接使用 primitive typeswrap 在另一个类型中使用您的类型。

    public class Time32 {
       private final UInt value;
       public Time32(...) {
         value = ...;
         if (value.getSize() != 5) {
           throw new IllegalArgumentException()
         }
       }
       public UInt toUInt() {
         return value;
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-10
      • 2014-03-18
      • 2012-02-07
      • 2012-11-27
      • 1970-01-01
      • 2016-03-28
      • 2016-05-31
      • 2019-07-01
      相关资源
      最近更新 更多