相关疑难解决方法(0)

如何在Java中构建时使用注释动态生成代码?

我正在寻找生成代码的解决方案.我用谷歌搜索,搜索SO和一些博客,但我找不到一个好的解决方案.

我想在我的类上添加一个注释,在编译时,一些方法和属性会自动添加到类中.

我正在寻找的解决方案的关键点:

  • 生成的代码可自定义(强制)
  • 没有apt必要调用外部工具(强制)
  • 仅限JDK,没有第三方框架(MANDATORY OPTIONAL)
  • 注释名称可自定义(可选)

例如 :

@Aliasable
public class MyClass {
//Some properties

// Contructor ...

// Some methods
}
Run Code Online (Sandbox Code Playgroud)

编译后我的类看起来像这样:

public class MyClass {
   //Some properties
   private String alias;

   // Contructor ...

   // Some methods
   public String getAlias() {
      return alias;
   }

   public void setAlias(String alias) {
      this.alias=alias;
   }
}
Run Code Online (Sandbox Code Playgroud)

编辑:
最后,我将我的第三个要求从MANDATORY转为OPTIONAL并选择了项目Lombok(与Maven和Eclipse轻松集成,几乎没有工作要做).

java annotations generated-code

23
推荐指数
2
解决办法
2万
查看次数

Java中的接口派生

我最近在使用Java,并且想知道Java中是否存在任何类型的接口实现派生.我首选的编程语言是Haskell,它在很多方面与Java相对立,但我想知道Java是否具有类似功能的一个特性是能够从其参数的接口实现派生复合类型的接口实现.例如,在Haskell中:

data Pair k v = Pair k v

instance (Ord k) => Ord (Pair k v) where
    compare (Pair x _) (Pair x' _) = compare x x'
Run Code Online (Sandbox Code Playgroud)

这允许您订购一个Pair如果它的第一个参数可以被订购,而不明确要求是这种情况.但是,我在Java中最接近的是通过明确的要求:

class Pair<K extends Comparable<K>, V> extends Comparable<Pair<K,V>> {
    K k;
    V v;
    public int compareTo(Pair<K,V> p) {
        return k.compareTo(p.k);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果没有一种方法可以推断可比性,我就不可能在不确保所有对具有可比较的第一个元素的情况下实现对的BST,因此我不能实现任何类型的Map,其中第一个元素没有明确要求是可比的.有没有办法绕过这个,除了创建一个我的BST类的方法,试图通过首先将它作为可比较的方法来比较泛型类型,然后作为具有可比较的键的一对,比较可能的可比性?

java generics haskell interface typeclass

5
推荐指数
1
解决办法
232
查看次数