Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以创建忽略特定方法的java对象吗?_Java_Object - Fatal编程技术网

我可以创建忽略特定方法的java对象吗?

我可以创建忽略特定方法的java对象吗?,java,object,Java,Object,假设我有一个名为Validation的类,它有五个方法。所有这些方法都非常复杂和庞大。在我的应用程序的某个部分中,我需要创建一个验证对象,但我将只使用该对象中的一个方法。我可以使方法静态来实现我的目的,但是对于应用程序的其余部分来说,这些方法应该是非静态的 那么,有没有一种方法可以创建一个只包含一个非静态方法的类的对象呢 您所能做的最好的事情(回答问题)是使方法受保护,并有一个子类验证,该子类扩展了它。然后,如果所有其他方法都是private,则该对象将只有一个受保护的方法 不过情况有点糟糕。更

假设我有一个名为
Validation
的类,它有五个方法。所有这些方法都非常复杂和庞大。在我的应用程序的某个部分中,我需要创建一个
验证
对象,但我将只使用该对象中的一个方法。我可以使方法
静态
来实现我的目的,但是对于应用程序的其余部分来说,这些方法应该是非静态的

那么,有没有一种方法可以创建一个只包含一个非静态方法的类的对象呢

您所能做的最好的事情(回答问题)是使方法
受保护
,并有一个子类
验证
,该子类
扩展了它。然后,如果所有其他方法都是
private
,则该对象将只有一个
受保护的方法

不过情况有点糟糕。更有可能的是,如果你试图这样做,你要么是在无缘无故地尝试优化,要么是你在某个地方有一个糟糕的设计

e、 g


但是是的。我想不出一个有效的用例来解决这个问题。

您可以通过继承的方式解决这个问题,其中ValidationA将包含大多数客户机使用的常用方法(这里是您的一个特定方法),以及一个ValidationB类,它扩展了ValidationA并添加了更专门的方法


或者视情况而定,它可能是两个完全不同的对象。

不,没有这种方法。对象由状态和相关行为组成。对象将其状态存储在字段中,并通过方法公开其行为。方法对对象的内部状态进行操作,并作为对象到对象通信的主要机制

您所说的是创建一个person对象(其已定义了行走和跑步的行为),但他应该只行走而不跑步。这没有道理。
Jeff Gohlke提供了一个很好的解决方案

听起来有点像XY问题…方法不是数据,它们不会像属性那样占用内存或空间,你不必担心方法的“重复”,因为你创建了多个对象。你可以创建另一个类,它只有一个方法,作为主体,对原始类的字段进行相同的调用。被称为“授权”。@Nivas问题不在于重复这些方法。我将使用这个对象只调用一个方法一次。我觉得创建这些其他方法会浪费时间和内存(我知道这与大图相比微不足道,但仍然…@Barath这样做不会节省任何“内存”)。方法不占用内存。由于我们讨论的是Java,内存规模不同(与汇编相比),因此您可以安全地忽略额外使用的几个字节(如果有的话)。如果您感到好奇,可以使用JDK(1.6+)中包含的方法查看对象的内存使用情况。但这只会限制其他方法的使用,不会阻止对象将类的方法加载到内存中,就像OP希望的“我可以创建只包含一个非静态方法的类的对象”一样,而不是仅仅隐藏它们。@Mustafasabir是真的。取决于“包含”的定义。
public class Validation {

    private void method1() {}
    private void method2() {}
    protected void method3() {}
    private void method4() {}
}
public class RestrictedValidation extends Validation { }
public static void main(String[] args) {
    RestrictedValidation validation = new RestrictedValidation();
    validation.method1(); //compiler error
    validation.method2(); //compiler error
    validation.method3(); //success
    validation.method4(); //compiler error
}