Java 如何避免激活类上的所有方法?

Java 如何避免激活类上的所有方法?,java,Java,我正在尝试创建一个ArrayList,它处理不同的GUI组件。 这个类应该有方法,其中一些方法不适用于所有的组件,所以我尝试使用条件购买(conditional buy),这样解决它似乎是不可能的 你能给我指出解决这个问题的正确方向吗 代码: 公共类 { 私人ArrayList实验室; 私人ArrayList但是; //... 最终int t; 公共ArrGUI(JLabel x){ lab=newarraylist(); t=0;} //…更多具有不同参数和不同t值的构造函数 //数组列表的常

我正在尝试创建一个ArrayList,它处理不同的GUI组件。 这个类应该有方法,其中一些方法不适用于所有的组件,所以我尝试使用条件购买(conditional buy),这样解决它似乎是不可能的

你能给我指出解决这个问题的正确方向吗

代码:

公共类
{
私人ArrayList实验室;
私人ArrayList但是;
//...
最终int t;
公共ArrGUI(JLabel x){
lab=newarraylist();
t=0;}
//…更多具有不同参数和不同t值的构造函数
//数组列表的常用方法
如果(tipo==0)
{
公共空间可视性i(){
for(JLabel i:lab)i.setVisible(true);}
公共无效VisibleNO(){
for(JLabel i:lab)i.setVisible(false);}
//...
编辑:我这样解决了我的问题。要访问任何其他方法,我将使用obtener方法。 谢谢你的帮助

    public class ArregloGUI
    {
private ArrayList <Component> lab;

public ArregloGUI(Component x){
lab = new ArrayList <Component> ();}

//Operaciones
public void adicionar(Component x) {
    lab.add(x);}

public int tamaño() {
    return lab.size();}

public Component obtener(int i) {
    return lab.get(i);}

public void eliminarAlFinal() {
    if (tamaño() > 0)   lab.remove(tamaño()-1);}

public void reinicializarArreglo() {
    if (tamaño() > 0)   lab.clear();}

public void ubicar(int i, int x, int y, int xx, int yy){
    obtener(i).setBounds(x,y,xx,yy);}
    }
公共类
{
私人ArrayList实验室;
公共图形用户界面(组件x){
lab=newarraylist();}
//歌剧
公共空间(第x部分){
lab.add(x);}
塔马尼诺公共酒店{
返回实验室大小();}
公共组件获取器(int i){
返回lab.get(i);}
公共无效最终版本(){
if(tamaño()>0)lab.remove(tamaño()-1);}
公共空间重新确认ARREGLO(){
如果(tamaño()>0)实验室清除();}
公共车辆(int i、int x、int y、int xx、int yy){
obtener(i).setBounds(x,y,xx,yy);}
}

如果某个方法可以在对象上调用,则在Java中是静态确定的。它可能不依赖于对象中存储的数据

如果在不应该调用该方法时调用该方法,则可以让该方法抛出一个
IllegalStateException
。例如:

public void VisibleSI() {
    if (tipo != 0) {
        throw new IllegalStateException();
    }
    for (JLabel i: lab) i.setVisible(true);
}

但是,更好的方法是为不同的情况定义不同的类。

这还不清楚。请给出一个你想做什么的示例。在这里,你可以为你的类创建两个或多个逻辑分隔的
接口。
。要了解更多信息,谢谢,我会检查接口,我读了一些,但我无法解释如何操作在这里使用它。我通过制作一个
组件的ArrayList
,并为每个GUI元素分别实例化它,解决了这个问题。至少它对我正在做的工作有效,很抱歉我没有说得这么清楚。你是对的。因为我将免费创建一个大类(并且可能会消耗内存)。但是,我通过用组件类替换GUI组件来解决我的问题。到目前为止,它一直很有魅力。(该类被替换为单个组件arraylist字段,我不需要特定的方法,我可以使用返回
lab.get(i)的公共组件方法访问sice);
。为了获得更好的结果,我正在为每种组件类型创建一个此类实例。
public void VisibleSI() {
    if (tipo != 0) {
        throw new IllegalStateException();
    }
    for (JLabel i: lab) i.setVisible(true);
}