相关疑难解决方法(0)

Java - 获取某些类型的字段名称

我在下面有一个示例类,我想返回某些类型的所有类字段,在此类型为Image的示例中.

public class Contact {
    private String surname, lastname, address;
    private int age, floor;
    private Image contactPhoto, companyPhoto;
    private boolean isEmployed;

    public String[] getAllImages() {
        String images[] = // missing code
        return images;
        // in this case, I want to return {"contactPhoto","companyPhoto"}
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要一个帮助.如何查找特定类型的所有类字段.我将在另一个类c中调用此方法.

java reflection

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

android java dot 类语法 MainActivity.class.getSimpleName();

我不断遇到这种语法,但找不到任何解释。

private static final String TAG = MainActivity.class.getSimpleName();
Log.i(TAG,”some log statement”);
Run Code Online (Sandbox Code Playgroud)

class关键字是什么意思MainActivity.class.getSimpleName();

此代码的外观和使用方式的完整图片

public class MainActivity extends AppCompatActivity {

    //What does "class" signify in the following MainActivity.class.getSimpleName();
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG, "onCreate()");
    }
}
Run Code Online (Sandbox Code Playgroud)

java android

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

与方法变量相比,lambda 表达式有什么优势?

我对 lambda 表达式很陌生,所以请耐心等待。假设我有一个带有单个抽象函数的接口:

public interface IAbsFunc {
    public abstract void absFunc(int x);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以将 lambda 表达式存储在变量中:

public class Lambda {
    public static void main(String[] args) {
        IAbsFunc obj = (int x) -> System.out.println(x);
        obj.absFunc(3);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,这就像将方法存储在变量中。但是,这已经可以通过 java.lang.reflect 完成:

public class Lambda {
    public static void main(String[] args) throws Exception {
        Method obj = PrintStream.class.getDeclaredMethod("println", int.class);
        obj.invoke(System.out, 3);
    }
}
Run Code Online (Sandbox Code Playgroud)

显然我在这里遗漏了一些东西。在什么情况下 lambda 表达式更可取?

java reflection lambda

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

将类作为java中方法的参数传递

我试图创建一个创建类的新对象的方法,但我希望能够创建许多不同类的对象,因此为每个类创建一个方法对我来说不起作用.有没有什么方法可以将类传递给方法,以便可以创建新对象?我的所有类都有相同的构造函数.

java methods class object

0
推荐指数
1
解决办法
4362
查看次数

如何在Java中使用反射获取枚举字段名称?

这是我的课:

public enum Currency {
    NIS, USD, EUR, GBP, JPY, AUD, CAD, DKK, NOK, ZAR, SEK, CHF, JOD, LBP, EGP;

    private String name;
    private int unit;
    private String country;
    private double rate;
    private double change;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用反射获取此类的字段名称时,我得到了专用字段和枚举常量(NIS,EUR,....)

如何仅获取专用字段名称?

java reflection enums

0
推荐指数
1
解决办法
2626
查看次数

有关如何在Java代码中检查非唯一ID的常规信息

在一个非常庞大的项目中,有很多ExceptionClasses,其中实现了异常细节enum.

NAME_OF_EXCEPTION_DETAIL(ID, PRIORITY)
Run Code Online (Sandbox Code Playgroud)

例如:

NO_LICENSE_FOUND(100, 0)
UNSUPPORTED_LICENSE(101, 1)
WRONG_LICENSE_FOR_VERSION(101, 0)
Run Code Online (Sandbox Code Playgroud)

在某些情况下,异常详细信息ID是相同的,应该永远不会发生.很可能有更多的重复,但这个项目是巨大的手工检查...

是否有一种智能的方法来检查重复的代码,例如UnitTesting - 从未使用它.

谢谢你的帮助!

编辑(当只使用一个枚举时,Bens答案是解决此问题的好方法):为了更清楚我的具体任务,这就是情况.编写了很多类来处理ExceptionDetails,例如

TopicOneExceptionDetails.java
TopicTwoExceptionDetails.java  (and so on)
Run Code Online (Sandbox Code Playgroud)

这些类中的每一个都定义了这个主题的枚举,如下所示:

public enum TopicOneExceptionDetails implements ApplicationException.ExceptionDetails { .... }
Run Code Online (Sandbox Code Playgroud)

然后声明与TopicOne错误相关的错误,例如

SETTING_TIMEZONE_FAILED(55, ...)
Setting_DATETIME_FAILED(56, ...)
Run Code Online (Sandbox Code Playgroud)

在这个TopicOne的枚举中,每个错误ID都必须是唯一的.但是例如ID 55(此处用于SETTING_TIMEZONE_FAILED)可用于声明与TopicTwo相关的错误而没有问题.

编辑2(使用思考?)我找到了一篇关于马特·谢泼德写的关于java 的非常有用的答案.我认为这可以解决我的问题.我需要休息但我会报告回来.我目前的想法是:Reflections

Reflections reflections = new Reflections("project.de")
for(Class<? extends ApplicationException.ExceptionDetails> exceptionDetailsClasses : reflections.getSubTypesOf(ApplicationException.ExceptionDetails.class)){
for ( ... ) .. }
Run Code Online (Sandbox Code Playgroud)

我应该能够检查ID,例如Ben建议.我稍后会报告.

编辑3(问题解决了!)就像在编辑2中描述的那样,我能够轻松地解决这个问题reflections.

public class ApplicationExceptionDetailsErrorCodeValidationTest {


@Test
  public void validateErrorCodeUniqueness() throws ErrorCodeUniquenessBroken{ …
Run Code Online (Sandbox Code Playgroud)

java unit-testing

0
推荐指数
1
解决办法
582
查看次数

Android Studio 中“View v”的含义

我正在尝试在我的 Android 应用程序中实现按钮点击处理。

在包含我的按钮的 XML 布局文件中,我向我的ButtonXML 元素添加了以下行:

android:onClick="handleClick"
Run Code Online (Sandbox Code Playgroud)

我还在Activity使用此布局的 中定义了具有以下签名的方法:

public void handleClick() { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

但是,当我使用此代码运行我的应用程序时,它崩溃了。我能够通过将我的方法签名更新为以下内容来修复此崩溃:

public void handleClick(View v) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么我需要包含这个View参数?

java android android-view

0
推荐指数
1
解决办法
4321
查看次数

如何在java中创建现有对象的数据类型列表

那问题就是这么说的.这是我想要的一个例子

String s = new String();
List<s.type> ls = new ArrayList<s.type>();
Run Code Online (Sandbox Code Playgroud)

这样的东西,或任何优雅的方式来实现这一点,如果条件或条件逻辑,请不要多,因为可能有无限的数据类型,我在这里仅使用字符串作为一个例子,它可以是任何东西.

java generics types object

-1
推荐指数
1
解决办法
120
查看次数

Java中的反射api

我需要解释以下问题:

  • java中的反射是什么?
  • 在什么情况下我需要使用反射?
  • 需要使用反射的实时场景和示例?

我在反思中很困惑。我已经阅读了很多文件,但我仍然感到困惑。请给我一个我能完全理解的解释。

java reflection

-2
推荐指数
1
解决办法
2136
查看次数