首页 \ 问答 \ Java通用 - 对象方法无法找到(Java Generic - object method cannot be found)

Java通用 - 对象方法无法找到(Java Generic - object method cannot be found)

我有一个接口,看起来像:

package com.sample.service;

import com.sample.model.Request;

public interface Service<T> {
    void add(T domain);
    <E> boolean update(Request<E> request);
}

Request.java

package com.sample.model;

public class Request<E> {
    private final E entity;

    public Request(E entity) {
        this.entity = entity;
    }

    public E getEntity() {
        return entity;
    }
}

以下是我的实施

package com.sample.service;

import com.sample.domain.User;
import com.sample.model.Form;
import com.sample.model.Request;

public class UserServiceImpl implements Service<User> {

    @Override
    public  void add(User user) {
        System.out.println("add: " + user);
    }

    @Override
    public <Form> boolean update(Request<Form> request) {
        System.out.println("update: " + request);
        Form form = request.getEntity();
        //form.setUsername("some_username");//This line caused compile error
        return true;
    }
}

这里是Form.java

package com.sample.model;

public class Form {
    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return username;
    }
}

和User.java

package com.sample.domain;

public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

当我编译并执行这些代码时,一切都很好。 但是,当我取消注释UserServiceImpl中的注释行时,出现编译错误

UserServiceImpl.java:19: error: cannot find symbol
        form.setUsername("some_username");

我的问题是为什么无法找到表单对象中的setUsername方法? 表单对象是可变的。


I've an interface that looks like:

package com.sample.service;

import com.sample.model.Request;

public interface Service<T> {
    void add(T domain);
    <E> boolean update(Request<E> request);
}

Where the Request.java

package com.sample.model;

public class Request<E> {
    private final E entity;

    public Request(E entity) {
        this.entity = entity;
    }

    public E getEntity() {
        return entity;
    }
}

The following is my implementation

package com.sample.service;

import com.sample.domain.User;
import com.sample.model.Form;
import com.sample.model.Request;

public class UserServiceImpl implements Service<User> {

    @Override
    public  void add(User user) {
        System.out.println("add: " + user);
    }

    @Override
    public <Form> boolean update(Request<Form> request) {
        System.out.println("update: " + request);
        Form form = request.getEntity();
        //form.setUsername("some_username");//This line caused compile error
        return true;
    }
}

And here are the Form.java

package com.sample.model;

public class Form {
    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    @Override
    public String toString() {
        return username;
    }
}

and User.java

package com.sample.domain;

public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

When I compiled and execute these codes everything is fine. However, when I uncomment the line commented in UserServiceImpl, I got compile error

UserServiceImpl.java:19: error: cannot find symbol
        form.setUsername("some_username");

My question is why the setUsername method in form object cannot be found? The form object is mutable.


原文:https://stackoverflow.com/questions/33084131
更新时间:2023-11-12 15:11

最满意答案

您正在寻找ArgumentOutOfRangeException - 当参数的值超出被调用方法定义的允许值范围时引发的异常。 (MSDN: http//msdn.microsoft.com/en-us/library/system.argumentoutofrangeexception%28v=vs.110%29.aspx


You're looking for ArgumentOutOfRangeException - The exception that is thrown when the value of an argument is outside the allowable range of values as defined by the invoked method. (MSDN: http://msdn.microsoft.com/en-us/library/system.argumentoutofrangeexception%28v=vs.110%29.aspx)

相关问答

更多

相关文章

更多

最新问答

更多
  • 如何在Laravel 5.2中使用paginate与关系?(How to use paginate with relationships in Laravel 5.2?)
  • linux的常用命令干什么用的
  • 由于有四个新控制器,Auth刀片是否有任何变化?(Are there any changes in Auth blades due to four new controllers?)
  • 如何交换返回集中的行?(How to swap rows in a return set?)
  • 在ios 7中的UITableView部分周围绘制边界线(draw borderline around UITableView section in ios 7)
  • 使用Boost.Spirit Qi和Lex时的空白队长(Whitespace skipper when using Boost.Spirit Qi and Lex)
  • Java中的不可变类(Immutable class in Java)
  • WordPress发布查询(WordPress post query)
  • 如何在关系数据库中存储与IPv6兼容的地址(How to store IPv6-compatible address in a relational database)
  • 是否可以检查对象值的条件并返回密钥?(Is it possible to check the condition of a value of an object and JUST return the key?)
  • GEP分段错误LLVM C ++ API(GEP segmentation fault LLVM C++ API)
  • 绑定属性设置器未被调用(Bound Property Setter not getting Called)
  • linux ubuntu14.04版没有那个文件或目录
  • 如何使用JSF EL表达式在param中迭代变量(How to iterate over variable in param using JSF EL expression)
  • 是否有可能在WPF中的一个单独的进程中隔离一些控件?(Is it possible to isolate some controls in a separate process in WPF?)
  • 使用Python 2.7的MSI安装的默认安装目录是什么?(What is the default installation directory with an MSI install of Python 2.7?)
  • 寻求多次出现的表达式(Seeking for more than one occurrence of an expression)
  • ckeditor config.protectedSource不适用于editor.insertHtml上的html元素属性(ckeditor config.protectedSource dont work for html element attributes on editor.insertHtml)
  • linux只知道文件名,不知道在哪个目录,怎么找到文件所在目录
  • Actionscript:检查字符串是否包含域或子域(Actionscript: check if string contains domain or subdomain)
  • 将CouchDB与AJAX一起使用是否安全?(Is it safe to use CouchDB with AJAX?)
  • 懒惰地初始化AutoMapper(Lazily initializing AutoMapper)
  • 使用hasclass为多个div与一个按钮问题(using hasclass for multiple divs with one button Problems)
  • Windows Phone 7:检查资源是否存在(Windows Phone 7: Check If Resource Exists)
  • 无法在新线程中从FREContext调用getActivity()?(Can't call getActivity() from FREContext in a new thread?)
  • 在Alpine上升级到postgres96(/ usr / bin / pg_dump:没有这样的文件或目录)(Upgrade to postgres96 on Alpine (/usr/bin/pg_dump: No such file or directory))
  • 如何按部门显示报告(How to display a report by Department wise)
  • Facebook墙贴在需要访问令牌密钥后无法正常工作(Facebook wall post not working after access token key required)
  • Javascript - 如何在不擦除输入的情况下更改标签的innerText(Javascript - how to change innerText of label while not wiping out the input)
  • WooCommerce / WordPress - 不显示具有特定标题的产品(WooCommerce/WordPress - Products with specific titles are not displayed)