比较<v extends =“”比较<v =“”>&gt;整数

时间:2015-12-19 20:13:53

标签: java generics comparable generic-programming

我是仿制药的新手,想要解决一个小任务。

我想给两个类型对象#34; V扩展可比较&#34;到了ComparePredicate类,然后检查方法&#34; isOk&#34;如果是int值&#34;值&#34; Tree类是在这两个对象之间。 我选择了compareTo方法,因为Integer和V应该是可比较的类型,但编译器会给出错误。 我认为这只是一个语法问题。

那么我怎么需要把它写得正确。希望你们能帮助我。 谢谢你的回答。

Class ComparePredicate

<!DOCTYPE html>
<html>

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <style type="text/css">
    <!-- #main {
      max-width: 800px;
      margin: 0 auto;
    }
    -->
  </style>
</head>

<body>
  <div id="main">
    <h1>Add or Remove text boxes with jQuery</h1>
    <div class="my-form">
      <!--            <form action="next.php" method="post">-->
      <button onclick="addAuthor()">Add Author</button>
      <br>
      <br>
      <div id="addAuth"></div>
      <br>
      <br>
      <button onclick="submit()">Submit</button>
      <!--            </form>-->
    </div>

    <div id="result"></div>
  </div>

  <script type="text/javascript">
    var authors = 0;

    function addAuthor() {
      authors++;
      var str = '<br/>' + '<div id="auth' + authors + '">' + '<input type="text" name="author" id="author' + authors + '" placeholder="Author Name:"/>' + '<br/>' + '<button onclick="addMore(\'auth' + authors + '\')" >Add Book</button>' + '</div>';
      $("#addAuth").append(str);
    }

    var count = 0;

    function addMore(id) {
      count++;
      var str =
        '<div id="bookDiv' + count + '">' + '<input class="' + id + '" type="text" name="book' + id + '" placeholder="Book Name"/>' + '<span onclick="removeDiv(\'bookDiv' + count + '\')">Remove</span>' + '</div>';
      $("#" + id).append(str);
    }

    function removeDiv(id) {
      $("#" + id).slideUp(function() {
        $("#" + id).remove();
      });
    }

    function submit() {
      var arr = [];
      for (i = 1; i <= authors; i++) {
        var obj = {};
        obj.name = $("#author" + i).val();
        obj.books = [];
        $(".auth" + i).each(function() {
          var data = $(this).val();
          obj.books.push(data);
        });
        arr.push(obj);
      }
      sendToServer(arr);
      //$("#result").html(JSON.stringify(arr));
    }

    function sendToServer(data) {
      $.ajax({
        type: "POST",
        data: {
          arr: JSON.stringify(data)
        },
        url: "next.php",
        success: function() {

        }
      });

    }
  </script>
</body>

</html>

类树

public class ComparePredicate<V extends Comparable<V>> implements TreePredicate<V> {

    V minEle;
    V maxEle;

    public ComparePredicate(V minEle, V maxEle) {
        this.minEle = minEle;
        this.maxEle = maxEle;
    }

    @Override
    public boolean isOk(Tree<V> tree) {

        return minEle.compareTo(Integer.valueOf(tree.getValue())) > 0 &&
                maxEle.compareTo(Integer.valueOf(tree.getValue())) < 1;
        //COMPILER ERROR: "The method compareTo(V) in the type Comparable<V> is not applicable for the arguments (Integer)"

        return false;
    }

}

1 个答案:

答案 0 :(得分:0)

更改树类

static class Tree<T> {
    private T value;
    private final Tree<T> left;
    private final Tree<T> right;

    public Tree(T v, Tree<T> l, Tree<T> r) {
        this.value = v;
        this.left = l;
        this.right = r;
    }

    public T getValue() {
        return this.value;
    }

    // getters ...

}

并且还要更改isOk()

    @Override
    public boolean isOk(Tree<V> tree) {
        return minEle.compareTo(tree.getValue()) <= 0 &&
                maxEle.compareTo(tree.getValue()) >= 0;
    }